CodeChef submission 83987 (C++ 4.0.0-8) plaintext list. Status: TLE, problem G1, contest SEP09. By gmark (Mark Greve), 2009-09-02 00:09:35.
// A Bowling Game // Source: CodeChef September Algorithm Challenge // CodeChef ID: G1 #include <algorithm> #include <bitset> #include <cassert> #include <cctype> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <functional> #include <iomanip> #include <iostream> #include <list> #include <map> #include <numeric> #include <queue> #include <set> #include <sstream> #include <stack> #include <string> #include <utility> #include <vector> using namespace std; int dp[21][2001]; int n,k; int gg[20000]; int grundy(int x) { if (x==0) return 0; int& ref = dp[k][x]; if (ref != -1) return ref; vector<int> seen; for (int m=1;m<=min(x,k);++m) { for (int i=0;x-m-i>=0;++i) { int ns = grundy(i) ^ grundy(x-m-i); gg[ns] = 1; seen.push_back(ns); } } for (int i=0;;++i) if (gg[i]==0) { for (int i=0;i<seen.size();++i) gg[seen[i]] = 0; return ref = i; } } char s[2005]; int ng; int groups[2005]; int sp[2005]; void determine_winner() { int ret = 0; for (int i=0;i<ng;++i) { ret ^= grundy(groups[i]); } if (ret==0) { return; } set<int> groups_seen; // Find the best move for (int m=k;m>=1;--m) { for (int i=0;i<ng;++i) if (groups[i]>=m) { if (groups_seen.count(groups[i])) continue; groups_seen.insert(groups[i]); //for (int p=0;p<groups[i]-m+1;++p) { for (int p=0;p<=groups[i]-m-p;++p) { int oret = ret; int nret = ret ^ grundy(groups[i]) ^ grundy(p) ^ grundy(groups[i]-m-p); //printf("\t\t M: %d GROUP %d, CALL on %d and %d\n", m, i, p, groups[i]-m-p); if (nret == 0) { //printf("G: %d, P: %d, M: %d, SP: %d\n", i, p, m, sp[i]); for (int j=sp[i] + p; j < sp[i] + p + m; ++j) { //printf("SET %d to 0\n", j); s[j] = '0'; } return; } ret = oret; } } } } int main() { int NCASES; int cur = 0; ng = 0; for (int i=0;i<=n;++i) { if (i==n || s[i]=='0') { groups[ng++] = cur; cur = 0; } else { if (cur==0) sp[ng] = i; ++cur; } } determine_winner(); } }
Comments

