QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#814489#9878. A xor B plus Cucup-team1453#AC ✓1169ms104352kbC++142.0kb2024-12-14 17:52:122024-12-14 17:52:19

Judging History

This is the latest submission verdict.

  • [2024-12-14 17:52:19]
  • Judged
  • Verdict: AC
  • Time: 1169ms
  • Memory: 104352kb
  • [2024-12-14 17:52:12]
  • Submitted

answer

#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long 
#define sz(a) ((int) (a).size())
#define pb emplace_back
#define me(a, x) memset(a, x, sizeof(a))
#define vi vector<int>
#define ull unsigned long long
#define i128 __int128
#define double long double
using namespace std;
#define pii pair<int,int>
const int N = 1 << 21;
const int mod = 998244353;
ll a, b, c, n;
ll f[N];
int main() {
	// int P = 768;
	// L(i, 2, P) while(P % i == 0) {
	// 	P /= i;
	// 	cout << i << endl;
	// }
	// return 0;
	ios :: sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	cin >> a >> b >> c >> n;
	if(n == 1) {
		cout << a << '\n';
		return 0;
	}
	if(n == 2) {
		cout << b << '\n';
		return 0;
	}
	n -= 3;
	int hb = 1;
	while((1 << hb) <= max(max(a, b), c))++hb;
	ll cyc = (1LL << (hb - 1)) * 3;
	ll x = a, y = b;
	vector<ll>inc;
	L(i, 0, cyc - 1) {
		f[i] = x ^ y;
		f[i] += c;
		if(f[i] >> hb & 1) f[i] -= 1 << hb, inc.pb(i);
		x = y, y = f[i];
	}
	int ans = f[n % cyc];
	int mut = 1LL << hb;
	while(sz(inc)) {
		// cout << "SZ = " << sz(inc) << ' ' << inc[0] << ' ' << cyc << endl;
		vector<ll>pub;
		int len = sz(inc);
		inc.resize(len * 2);
		L(i, 0, len - 1) {
			inc[i + len] = inc[i] + cyc;
		}
		if(cyc <= n) cyc *= 2;
		ll curt = 0, X = 0, Y = 0;
		auto work = [&] (ll t) {
			L(j, 1, t % 3) {
				Y ^= X;
				X ^= Y;
			}
			return;
		};
		ll P = n % cyc;
		int eval = -1;
		for(auto&u : inc) {
			if(curt <= P && P < u) {
				work(P - curt);
				eval = X ^ Y;
				work(u - P);
			} else {
				work(u - curt);
			}
			if(X ^ Y) pub.pb(u);
			Y ^= X;
			X ^= Y;
			Y ^= 1;
			if(P == u) {
				eval = Y;
			}
			curt = u + 1;
		}
		if(curt <= P) {
			work(P - curt);
			eval = X ^ Y;
		}
		if(eval) (ans += mut) %= mod;
		// cout << "eval="<<eval<<endl;
		mut = (ll)mut * 2 % mod;
		inc = pub;
		while(sz(inc) && inc.back() > n) inc.pop_back();
	}
	cout << ans << '\n';
	return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3556kb

input:

1 2 3 4

output:

7

result:

ok "7"

Test #2:

score: 0
Accepted
time: 1ms
memory: 3844kb

input:

123 456 789 123456789

output:

567982455

result:

ok "567982455"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3808kb

input:

0 0 0 1000000000000000000

output:

0

result:

ok "0"

Test #4:

score: 0
Accepted
time: 0ms
memory: 3616kb

input:

628 314 157 1

output:

628

result:

ok "628"

Test #5:

score: 0
Accepted
time: 0ms
memory: 3848kb

input:

167 924 167 2

output:

924

result:

ok "924"

Test #6:

score: 0
Accepted
time: 0ms
memory: 16280kb

input:

1048575 1048575 1048575 1000000000000000000

output:

1048575

result:

ok "1048575"

Test #7:

score: 0
Accepted
time: 1141ms
memory: 68444kb

input:

287144 758614 992207 1000000000000000000

output:

638555367

result:

ok "638555367"

Test #8:

score: 0
Accepted
time: 1111ms
memory: 93300kb

input:

442510 534717 936857 1000000000000000000

output:

125005501

result:

ok "125005501"

Test #9:

score: 0
Accepted
time: 1169ms
memory: 69264kb

input:

507590 985947 1025549 999999999999999833

output:

363289377

result:

ok "363289377"

Test #10:

score: 0
Accepted
time: 1169ms
memory: 69620kb

input:

989414 986755 1024915 1000000000000000000

output:

176552525

result:

ok "176552525"

Test #11:

score: 0
Accepted
time: 942ms
memory: 79156kb

input:

773910 981383 748815 999999999999999372

output:

712048477

result:

ok "712048477"

Test #12:

score: 0
Accepted
time: 613ms
memory: 46144kb

input:

539000 982202 549877 1000000000000000000

output:

49295427

result:

ok "49295427"

Test #13:

score: 0
Accepted
time: 914ms
memory: 84384kb

input:

930318 901108 790115 999999999999999002

output:

446688556

result:

ok "446688556"

Test #14:

score: 0
Accepted
time: 1130ms
memory: 75556kb

input:

57298 210381 985237 1000000000000000000

output:

533555472

result:

ok "533555472"

Test #15:

score: 0
Accepted
time: 336ms
memory: 40664kb

input:

567956 1013479 284068 1000000000000000000

output:

13855344

result:

ok "13855344"

Test #16:

score: 0
Accepted
time: 1132ms
memory: 100816kb

input:

694266 795841 967344 1000000000000000000

output:

179712105

result:

ok "179712105"

Test #17:

score: 0
Accepted
time: 291ms
memory: 39544kb

input:

744515 402386 261828 1000000000000000000

output:

915814204

result:

ok "915814204"

Test #18:

score: 0
Accepted
time: 133ms
memory: 25816kb

input:

630928 108751 103226 1000000000000000000

output:

314920156

result:

ok "314920156"

Test #19:

score: 0
Accepted
time: 661ms
memory: 65668kb

input:

408870 219543 576432 1000000000000000000

output:

332612604

result:

ok "332612604"

Test #20:

score: 0
Accepted
time: 1138ms
memory: 70312kb

input:

208613 769277 1010542 819875140559301752

output:

110220300

result:

ok "110220300"

Test #21:

score: 0
Accepted
time: 444ms
memory: 47580kb

input:

123844 719656 377241 520974001002628387

output:

986512272

result:

ok "986512272"

Test #22:

score: 0
Accepted
time: 990ms
memory: 85580kb

input:

774205 820111 841396 711066335916901718

output:

254873758

result:

ok "254873758"

Test #23:

score: 0
Accepted
time: 1150ms
memory: 68208kb

input:

604531 395365 966071 999594448264125858

output:

505142123

result:

ok "505142123"

Test #24:

score: 0
Accepted
time: 1082ms
memory: 92616kb

input:

59523 598376 922420 752304351201620672

output:

351022203

result:

ok "351022203"

Test #25:

score: 0
Accepted
time: 1115ms
memory: 104352kb

input:

192450 176925 1037973 192583019203393748

output:

56600397

result:

ok "56600397"

Test #26:

score: 0
Accepted
time: 1095ms
memory: 67848kb

input:

972801 523798 994144 594688603126478507

output:

750534499

result:

ok "750534499"

Test #27:

score: 0
Accepted
time: 4ms
memory: 15976kb

input:

669131 939565 629 543390474884493567

output:

652889135

result:

ok "652889135"

Test #28:

score: 0
Accepted
time: 426ms
memory: 41408kb

input:

829091 688584 371532 935387048229453232

output:

784327643

result:

ok "784327643"

Test #29:

score: 0
Accepted
time: 176ms
memory: 17576kb

input:

407113 311573 150840 428344291461283594

output:

486756568

result:

ok "486756568"

Test #30:

score: 0
Accepted
time: 314ms
memory: 39996kb

input:

338931 949581 280744 289664704872449795

output:

459928211

result:

ok "459928211"

Test #31:

score: 0
Accepted
time: 457ms
memory: 35048kb

input:

16277 434162 426083 575309380820099707

output:

927534514

result:

ok "927534514"

Test #32:

score: 0
Accepted
time: 619ms
memory: 44824kb

input:

669467 627218 559817 371026815047584891

output:

393999810

result:

ok "393999810"

Test #33:

score: 0
Accepted
time: 272ms
memory: 29516kb

input:

256940 648067 248598 702551234623621497

output:

107167397

result:

ok "107167397"

Test #34:

score: 0
Accepted
time: 87ms
memory: 30012kb

input:

112359 956967 160416 704822623170226832

output:

945781095

result:

ok "945781095"

Test #35:

score: 0
Accepted
time: 1053ms
memory: 90052kb

input:

608294 272679 879126 922348606336628938

output:

508826865

result:

ok "508826865"

Test #36:

score: 0
Accepted
time: 458ms
memory: 51656kb

input:

844223 856121 402112 640219260480538711

output:

494733011

result:

ok "494733011"

Test #37:

score: 0
Accepted
time: 95ms
memory: 22824kb

input:

589375 991964 85955 471255438930064341

output:

591777452

result:

ok "591777452"

Test #38:

score: 0
Accepted
time: 545ms
memory: 58088kb

input:

613807 685977 493404 774205724944088968

output:

686401274

result:

ok "686401274"

Test #39:

score: 0
Accepted
time: 56ms
memory: 18776kb

input:

686801 458561 52258 593361261434725536

output:

197205169

result:

ok "197205169"

Extra Test:

score: 0
Extra Test Passed