QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#30461#3853. Lines in a gridwhereismyteammate#WA 277ms252124kbC++201.9kb2022-04-28 21:52:182022-04-28 21:52:20

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-04-28 21:52:20]
  • 评测
  • 测评结果:WA
  • 用时:277ms
  • 内存:252124kb
  • [2022-04-28 21:52:18]
  • 提交

answer

#include <bits/stdc++.h>

const int N = 1e7 + 50;
const int mod = 1e6 + 3;
const int inv2 = (mod + 1) / 2;
inline int inc(int x, int y) { x += y - mod; return x + (x >> 31 & mod); }
inline int dec(int x, int y) { x -= y; return x + (x >> 31 & mod); }
inline auto mul(const auto &x, const auto &y) { return (int)(1ll * x * y % mod); }

inline auto mul(const auto x, const auto ... y) {
	return mul(x, mul(y...));
}

inline void upd(int &x, int y) { x = inc(x, y); }
inline void dpu(int &x, int y) { x = dec(x, y); }
inline void pud(int &x, int y) { x = mul(x, y); }

int mu[N], phi[N], pri[N], tot, f[N], sf[N], sg[N], sphi[N];
bool np[N];

void init(int n) {
	mu[1] = 1; np[1] = true; phi[1] = 1;
	f[1] = 1;
	for (int i = 2; i <= n; ++i) {
		if (!np[i]) {
			pri[++tot] = i;
			mu[i] = -1;
			phi[i] = i - 1;
		}
		for (int j = 1; j <= tot && i * pri[j] <= n; ++j) {
			np[i * pri[j]] = true;
			if (i % pri[j] == 0) {
				mu[i * pri[j]] = 0;
				phi[i * pri[j]] = phi[i] * pri[j];
				break;
			}
			else {
				mu[i * pri[j]] = -mu[i];
				phi[i * pri[j]] = phi[i] * phi[pri[j]];
			}
		}
		f[i] = mul(mul(inv2, phi[i]), i);
	}
	for (int i = 1; i <= n; ++i) {
		sphi[i] = inc(sphi[i - 1], phi[i]);
		sf[i] = inc(sf[i - 1], f[i]);
		sg[i] = inc(sg[i - 1], mul(i, f[i]));
	}
}

int solve(int n) {
	if (n == 1) return 0;
	int X = mul(n, n, sphi[n - 1]);
	dpu(X, mul(3, n, sf[n - 1]));
	upd(X, sg[n - 1]);
	upd(X, n);
	dpu(X, mul(n, n, sphi[n / 2]));
	upd(X, mul(6, n, sf[n / 2]));
	dpu(X, mul(4, sg[n / 2]));
	dpu(X, mul(2, n));
	int Y = mul(2, X);
	dpu(Y, mul(2, n));
	upd(Y, 3);
	pud(Y, 2);
	upd(Y, mul(2, n));
	return Y;
}

int main() {
	init(1e7);
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);
	int q;
	std::cin >> q;
	while (q--) {
		int x;
		std::cin >> x;
		std::cout << solve(x) << '\n';
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 251ms
memory: 250880kb

input:

10
1 2 3 4 5 6 7 8 9 10

output:

0
6
20
62
140
306
536
938
1492
2306

result:

ok 10 lines

Test #2:

score: 0
Accepted
time: 255ms
memory: 252124kb

input:

100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

output:

0
6
20
62
140
306
536
938
1492
2306
3296
4722
6460
8830
11568
14946
18900
23926
29544
36510
44388
53586
63648
75674
88948
104374
121032
139966
160636
184466
209944
239050
270588
305478
342480
383370
427020
475830
527280
583338
642900
708798
777912
854022
934604
21071
111365
209991
313609
425767
5425...

result:

ok 100 lines

Test #3:

score: 0
Accepted
time: 277ms
memory: 250612kb

input:

1000
999000 999001 999002 999003 999004 999005 999006 999007 999008 999009 999010 999011 999012 999013 999014 999015 999016 999017 999018 999019 999020 999021 999022 999023 999024 999025 999026 999027 999028 999029 999030 999031 999032 999033 999034 999035 999036 999037 999038 999039 999040 999041 9...

output:

546070
193945
346418
377018
37466
751815
955839
157887
339995
522058
582121
473366
340311
290383
918701
862726
444011
438858
911955
921485
301270
699249
433065
907182
40424
772622
357721
211889
575810
629609
30983
876744
264169
808803
188203
748204
392664
267459
919490
320743
3927
490236
833633
9156...

result:

ok 1000 lines

Test #4:

score: 0
Accepted
time: 230ms
memory: 250436kb

input:

1000
453972 516606 570567 374049 422559 197777 181774 541268 5455 532617 559307 552527 174796 106684 506191 654637 48814 772908 150793 871094 187337 630103 682078 590953 456679 32784 755725 312523 235515 810164 520456 642283 616498 185466 836147 831550 261713 127618 85181 923213 33952 867185 130882 ...

output:

521457
552203
362377
520340
271000
96956
991169
901031
375542
93773
236463
744764
604355
557256
117961
512339
574575
562694
659733
287701
110161
860510
650908
740606
323739
321423
978238
159053
556787
24079
504173
566425
693719
158187
732866
614438
684481
821497
720603
866172
997262
403230
732268
82...

result:

ok 1000 lines

Test #5:

score: 0
Accepted
time: 263ms
memory: 250588kb

input:

1000
746388 708028 258366 416454 498990 90616 45928 840954 771202 75901 201827 663367 302208 908508 491895 856966 656450 563176 794405 140655 780889 646713 471035 308676 33396 438704 58210 809605 888367 100839 316212 881395 877323 45138 850544 797210 40000 440819 794639 926781 460222 17291 226354 85...

output:

825131
100250
25349
910410
710624
369637
98838
949978
409802
983803
854332
75645
843457
396665
430341
743675
571733
983824
436291
699539
760039
176823
176085
737980
434777
840310
60100
384098
799468
967137
537714
659755
4153
949560
897417
848197
489161
905487
914244
10800
753864
311218
179848
316220...

result:

ok 1000 lines

Test #6:

score: 0
Accepted
time: 239ms
memory: 251588kb

input:

1000
80775 511476 672923 825999 827426 482347 497984 568943 798803 166491 938151 14447 501355 423281 465997 297312 34439 824488 968980 467674 513959 242596 915128 822510 541867 211231 704722 824306 88541 770898 771094 312857 192490 907310 491183 24385 168119 698832 437638 305360 425730 330313 57684 ...

output:

431698
650163
625836
669564
562886
83648
181374
120479
251594
603609
325264
249583
379375
251675
181237
627004
45958
639029
636613
518362
853345
477236
17135
341433
163255
961849
207864
706325
253265
435180
997239
690726
763725
684994
682307
253163
219348
467170
997646
608245
648427
889917
626905
41...

result:

ok 1000 lines

Test #7:

score: -100
Wrong Answer
time: 234ms
memory: 251032kb

input:

1000
9999000 9999001 9999002 9999003 9999004 9999005 9999006 9999007 9999008 9999009 9999010 9999011 9999012 9999013 9999014 9999015 9999016 9999017 9999018 9999019 9999020 9999021 9999022 9999023 9999024 9999025 9999026 9999027 9999028 9999029 9999030 9999031 9999032 9999033 9999034 9999035 9999036...

output:

758610
737610
691457
961370
489285
570120
308042
573342
781783
920307
499528
659373
509855
118260
287136
661165
240160
230255
51983
930553
868620
146092
885901
723868
382168
889588
772065
16814
623059
479828
690059
334304
267857
714127
700037
580676
207210
27363
622652
916528
301500
929498
436348
10...

result:

wrong answer 1st lines differ - expected: '678165', found: '758610'