UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#199236#2986. 斐波那契树游戏tkswls1001703ms1756kbC++1.3kb2023-12-07 11:21:232023-12-07 12:50:28

answer

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,  g[10004];
const ll mod = 1000000000000000000;
ll f[5][20004], maxn;
//i树 达到j的长度的方案数
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	if (n == 1) {
		cout << 0;
		return 0;
	} else if (n >= 2 && n < 6) {
		cout << 1;
		return 0;
	} else if (n == 6) {
		cout << 3;
		return 0;
	}
	g[1] = 0, g[2] = 1;
	int u, v;
	for (int i = 3; i <= n; i++) {
		g[i] = (g[i - 1] + 1) ^ (g[i - 2] + 1);
	}
	f[2][0] = 1;
	int p, q, w;
	for (int i = 3; i <= n; i++) {
		p = i % 3, q = (i - 1) % 3, w = (i - 2) % 3;
		memset(f[p], 0, sizeof(f[p]));
		for (int j = 0; j <= 8192; j++) {
			if (((j + 1) ^ (g[i - 2] + 1)) <= 8192) {
				f[p][(j + 1) ^ (g[i - 2] + 1)] += f[q][j];
//				if (f[q][j]) {
//					cout << ((j + 1) ^ (g[i - 2] + 1)) << " " << f[q][j] << "[]\n";
//				}
				f[p][(j + 1) ^ (g[i - 2] + 1)] %= mod;
			}
		}
		for (int j = 0; j <= 8192; j++) {
			if (((j + 1) ^ (g[i - 1] + 1)) <= 8192) {
				f[p][(j + 1) ^ (g[i - 1] + 1)] += f[w][j];
//				if (f[w][j]) {
//					cout << ((j + 1) ^ (g[i - 1] + 1)) << " " << f[w][j] << "[]\n";
//				}
				f[p][(j + 1) ^ (g[i - 1] + 1)] %= mod;
			}
		}
		f[p][g[i - 1] + 1]++, f[p][g[i - 2] + 1]++;
	}
	cout << f[n % 3][0];
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 2ms
memory: 1724kb

input:

10

output:

17

result:

ok 1 number(s): "17"

Test #2:

score: 10
Accepted
time: 3ms
memory: 1720kb

input:

49

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: 10
Accepted
time: 2ms
memory: 1720kb

input:

98

output:

489682332542266689

result:

ok 1 number(s): "489682332542266689"

Test #4:

score: 10
Accepted
time: 5ms
memory: 1716kb

input:

100

output:

580893155023212545

result:

ok 1 number(s): "580893155023212545"

Test #5:

score: 10
Accepted
time: 40ms
memory: 1728kb

input:

996

output:

65466977719549633

result:

ok 1 number(s): "65466977719549633"

Test #6:

score: 10
Accepted
time: 42ms
memory: 1720kb

input:

1000

output:

867114317183878825

result:

ok 1 number(s): "867114317183878825"

Test #7:

score: 10
Accepted
time: 425ms
memory: 1756kb

input:

10000

output:

438505383468410633

result:

ok 1 number(s): "438505383468410633"

Test #8:

score: 10
Accepted
time: 408ms
memory: 1752kb

input:

9999

output:

642529217977596839

result:

ok 1 number(s): "642529217977596839"

Test #9:

score: 10
Accepted
time: 368ms
memory: 1752kb

input:

8888

output:

952029781415483093

result:

ok 1 number(s): "952029781415483093"

Test #10:

score: 10
Accepted
time: 408ms
memory: 1756kb

input:

9876

output:

355465485961422525

result:

ok 1 number(s): "355465485961422525"

Extra Test:

score: 0
Extra Test Passed