Submission #19828

#TimeUsernameProblemLanguageResultExecution timeMemory
19828xhae동전 (kriii4_E)C++14
100 / 100
154 ms2744 KiB
#include <math.h> #include <stdio.h> #include <string.h> #include <vector> #include <string> #include <queue> #include <map> #include <algorithm> #include <cmath> #include <iostream> #include <sstream> #include <set> using namespace std; const int mmod = 1000000007; int prv[256][512]; // successive previous H, current grundy int nxt[256][512]; vector<int> grundy; void run_init(int n) { for (int i=0; i<256; i++) for (int j=0; j<512; j++) prv[i][j] = nxt[i][j] = 0; prv[0][0] = 1; for (int i=0; i<=n; i++) { for (int j=0; j<=i; j++) for (int k=0; k<512; k++) { if (i < n) { // H nxt[j+1][k] = (nxt[j+1][k] + prv[j][k]) % mmod; } if (j < n) { // T nxt[0][k^grundy[j]] = (nxt[0][k^grundy[j]] + prv[j][k]) % mmod; } } for (int j=0; j<256; j++) for (int k=0; k<512; k++) prv[j][k] = nxt[j][k], nxt[j][k] = 0; } } void run_grundy(int n) { for (int i=0; i<256; i++) for (int j=0; j<512; j++) prv[i][j] = nxt[i][j] = 0; prv[0][0] = 1; for (int i=0; i<=n; i++) { for (int j=0; j<=i; j++) for (int k=0; k<512; k++) { if (i < n) { // H nxt[j+1][k] = (nxt[j+1][k] + prv[j][k]) % mmod; } { // T nxt[0][k^grundy[j]] = (nxt[0][k^grundy[j]] + prv[j][k]) % mmod; } } for (int j=0; j<256; j++) for (int k=0; k<512; k++) prv[j][k] = nxt[j][k], nxt[j][k] = 0; } } int main() { int n; cin >> n; grundy.push_back(0); for (int i=1; i<=n; i++) { /* run_init(i); int ii = 0; while (prv[0][ii]) ii ++; grundy.push_back(ii);*/ grundy.push_back(i); } /* for (int i=0; i<=n; i++) printf("%d ", grundy[i]); printf("\n"); return 0;*/ run_grundy(n); printf("%d\n", prv[0][0]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...