C++の練習を兼ねて, AtCoder Regular Contest 137 の 問題D (Prefix XORs) を解いてみた.
■感想.
1. 問題D は, 方針が見えなかったので, 解説を参考に, AC版に到達できたと思う.
2. 過去問 AtCoder Beginner Contest 187 (F – Close Group) をベースにして, 部分集合を考える方針で実装してみたものの, 実行時間(3304[ms])が, かなり大きかったため, 改善の余地があると思われる(今後の課題として持っておく).
3. 引き続き, 時間を見つけて, 過去問の学習を進めていきたいと思う.
本家のサイト AtCoder Regular Contest 137 解説 の 各リンク を ご覧下さい.
■C++版プログラム(問題D/AC版).
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 |
// 解き直し. // https://atcoder.jp/contests/arc137/editorial/3589 // C++(GCC 9.2.1) #include <bits/stdc++.h> using namespace std; #define repex(i, a, b, c) for(int i = a; i < b; i += c) #define repx(i, a, b) repex(i, a, b, 1) #define rep(i, n) repx(i, 0, n) #define repr(i, a, b) for(int i = a; i >= b; i--) int a[1010101], ans[2020202]; int main(){ // 1. 入力情報. int N, M; scanf("%d %d", &N, &M); rep(i, N) scanf("%d", &a[i]); // 2. S を 計算. int S = 1; while(S < max(N, M)) S <<= 1; // 3. 操作(k = 1). rep(i, N) ans[1] ^= a[i]; // 4. 操作(k >= 2). // 過去問参照(AtCoder Beginner Contest 187 F - Close Group). // https://atcoder.jp/contests/abc187/editorial/488 // https://atcoder.jp/contests/abc187/submissions/19205798 // -> 部分集合 s と k が 同じケースを含めるため, 一部改変(for(int j = i; --j &= i; ) の 部分). repx(s, S - N, S){ for(int k = s; k &= s; k--) ans[k + 1] ^= a[s - (S - N)]; } // 5. 出力. rep(i, M) printf("%d%s", ans[i + 1], (i < M - 1) ? " " : "\n"); return 0; } |
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 |
[入力例] 3 2 2 1 3 [出力例] 0 1 ※AtCoderテストケースより [入力例] 10 12 721939838 337089195 171851101 1069204754 348295925 77134863 839878205 89360649 838712948 918594427 [出力例] 716176219 480674244 678890528 642764255 259091950 663009497 942498522 584528336 364872846 145822575 392655861 844652404 ※AtCoderテストケースより [入力例] 7 5 11 3 7 10 15 6 5 [出力例] 9 6 7 2 6 [入力例] 20 22 99 77 53 11 69 32 89 54 69 63 98 50 20 77 78 85 55 50 27 108 [出力例] 0 27 109 54 72 21 25 85 32 0 82 50 98 24 73 103 16 93 83 61 88 83 [入力例] 60 15 8777 9093 6326 6315 11000 255 2012 12073 8918 4632 6473 10990 6424 1056 7516 3298 3304 8068 11679 7925 3283 5221 11619 5543 2495 3726 2788 5819 12143 11972 2515 3206 3016 3480 7015 1289 11426 10165 6215 1691 6383 10122 11476 5358 9620 10670 7549 10238 10676 9753 10523 9550 5489 7369 4537 10089 5133 3226 6237 5026 [出力例] 195 11596 11044 8678 13857 15622 15729 7424 1043 14341 9216 8293 3120 3231 7229 [入力例] 200 33 11275 3642 4137 11368 2555 6684 9178 5024 3453 8405 9759 893 3978 5689 6340 6472 358 2841 8551 7063 4786 9449 6631 10328 6624 273 9829 10956 9124 9064 6961 4113 9959 6084 5672 4986 1535 1557 4477 2472 2829 1069 1785 2994 5626 1269 10313 9093 2077 1920 1743 8134 4278 11743 44 3622 7969 5541 12001 3507 8900 8644 12046 7774 4401 11788 12334 2465 7548 9325 7018 2929 10072 12324 8951 6873 3615 6420 2095 12269 2317 8060 2221 3367 1053 10228 10520 7489 6759 10237 7068 8301 9107 8057 7787 3485 7383 4084 10232 8473 12268 11485 3388 8087 1562 5746 8761 6006 9694 3563 6239 8170 7130 4453 5255 4538 7258 3946 4257 3951 11504 6351 4354 11100 1859 7657 5689 267 7933 8164 9685 6320 1543 3106 10000 5092 6330 10876 5083 9462 10786 10788 2512 8052 1636 865 4514 4658 3488 3662 6774 5402 11287 9231 10839 6295 6784 3847 9367 7625 9803 9939 8432 11193 11355 1480 5652 9301 2495 7218 12037 5290 7081 10560 222 8168 9109 7467 1156 10585 9951 2881 11846 11258 3622 2545 10211 11481 2943 7926 10715 8692 952 12264 11338 4168 6061 10759 4154 10647 [出力例] 16230 4952 6305 5306 9936 10659 10133 11978 6981 11476 2725 3380 10847 2443 3061 6776 5710 3327 319 711 2929 2229 6850 11820 16312 15790 6484 9251 8502 10140 5383 4296 417 [入力例] 1000 50 55230 13276 46032 90047 13897 93439 74663 51465 50284 121720 4960 87962 86688 81870 18237 12987 27161 55886 119063 101794 58878 22308 15083 10960 29886 41605 102721 76465 40366 64909 85182 4004 50717 111852 24292 73664 61001 15764 120557 12217 39672 6271 61819 113317 99235 67173 93274 83927 110029 114336 79652 83801 49034 3108 64819 121707 121878 40847 6089 37291 75364 77190 44808 64749 107878 44943 770 67832 35430 27583 59755 14387 76213 111313 81978 97649 11164 106543 97124 38124 3704 2173 39434 41935 39772 49544 118011 119396 112357 98769 29115 60794 1268 33166 78227 119947 73991 62279 38345 90904 46791 121889 98075 25787 121230 37518 95331 113032 122032 119945 123207 92614 7198 53342 95432 58666 15310 13090 42628 32006 114910 94534 60133 91137 5069 89628 10784 65808 42456 47341 77848 39112 55692 17007 14011 77391 53025 27611 43868 7781 100490 108816 21436 34199 73246 119125 115789 103830 19414 74638 65002 72147 32070 109048 43311 113909 88264 111918 62991 3086 55919 45484 100482 41887 74786 94663 10579 38233 20666 1844 77617 54457 752 49319 81871 57756 102943 91203 24768 105112 46862 116126 23389 4973 49793 114850 18522 58906 12048 5322 41531 3238 91453 66378 64237 45620 36435 1434 84890 12672 75365 17041 92542 21726 46258 26135 48950 110386 1974 121510 54984 12598 76692 108524 18002 113388 47603 76038 51450 21297 48722 14904 68287 81904 90787 88948 119474 90486 77949 85185 28844 43881 6263 122757 36287 120585 87454 70347 33461 43690 23994 114243 99525 79610 97266 45630 37347 53120 46950 106562 99495 18814 74672 27075 92025 120467 86390 90532 74717 22229 43248 95265 115538 121820 53200 97787 27316 105618 99360 78975 56769 70728 12721 89023 54539 39439 99930 35948 118375 70849 17399 88361 39231 39417 11994 15358 56215 17054 41478 73741 28509 54838 122170 64236 93508 59436 47486 31026 87234 76397 41387 34839 6478 50975 8441 104293 60008 32442 116938 116848 63963 111891 14148 120976 20090 18359 73385 104263 94357 123203 52651 11625 73203 17211 54949 16388 20724 10240 36847 80662 52280 81499 25972 61506 71412 58619 99620 118497 101090 67400 8492 116093 55877 94759 90034 74087 68413 104858 80351 112365 37608 108222 31659 108565 97277 105193 28246 102121 86350 76431 122874 91022 60969 2769 37464 101365 36132 66287 56594 109686 45188 66177 104170 24464 72130 51866 90949 58456 53369 87518 32744 104467 119667 99161 97953 9637 66413 36634 47292 53501 64507 85629 3822 55772 88440 58698 10554 76649 12627 24525 76642 42802 68956 99620 77473 99915 56065 13809 90950 49883 122237 80934 98801 96700 50570 20266 122316 4456 67485 95826 58875 110374 87081 66853 10228 74810 45083 99151 91358 68624 8881 3633 14325 72583 10436 46301 120906 12949 56985 45160 83578 29290 43639 52201 25153 44997 1146 47375 88350 121043 121187 114859 28809 120968 89741 34127 70513 121609 116379 103573 810 44388 112478 77474 59295 72210 74796 29945 98425 81407 62211 48615 95377 93553 31033 46651 6767 89153 77153 87001 118586 17855 5957 37487 105611 93568 59063 98970 97812 59094 85032 40334 51031 32704 72170 116174 100652 112974 22642 90312 116321 51783 57382 76533 108385 15062 74938 35976 61410 112076 61394 56579 118528 107430 2370 59506 32964 73202 103170 18728 19183 70210 88507 63351 26654 113552 50472 80305 115830 117994 57785 121155 50612 32402 7769 34250 81225 81798 101087 2312 36404 113083 117864 116259 643 51514 24929 7846 50656 26031 76839 47249 803 101040 36352 113145 29329 117880 29009 109966 32912 32674 115241 58283 76089 100252 11381 62057 52990 3215 16205 109495 21961 78521 48863 111804 34810 67763 68285 95660 56277 76912 123223 90594 108313 31293 17543 8029 30282 95617 65031 111856 104409 21312 17601 21489 100019 53191 48703 116935 106278 98433 69964 20229 90236 24428 99054 103329 12261 116940 6761 113718 19247 109979 54226 89019 14884 22619 103722 48233 73711 77563 94686 72025 10342 98099 52371 117061 4129 7985 73460 81943 103420 47250 101642 6932 2042 33488 100240 19156 27216 9709 122144 5975 34857 102695 28901 3601 117061 33537 7070 55226 74066 13445 112403 27611 102548 18639 122391 122863 73563 12612 90594 23016 108557 84604 7677 70402 93575 83122 728 43317 52245 76281 92933 32504 91230 53008 92273 43506 94871 1079 45164 68207 88237 29051 73904 60650 1113 53636 50481 73656 58213 73194 40603 107251 60320 5077 26311 100531 19871 58534 83802 85734 85111 117991 110421 30233 75345 8554 53214 122302 56791 84263 630 68693 80762 79914 27835 119452 54090 28823 83874 57864 25847 59107 26427 9857 98429 17393 90428 80630 41618 90517 99327 104180 15876 111025 117581 67765 6104 57077 63244 47903 55333 46117 2066 330 5379 102335 116799 108856 4554 120139 67497 56907 66840 71919 66995 58224 117166 9650 15966 4650 7022 36912 54870 8945 107769 119364 60038 85506 50151 82186 27747 12707 11295 91993 1329 43524 113610 104673 57824 50334 34834 75771 18546 20895 16718 62618 78240 117819 17097 16296 91302 27671 106945 14587 69188 111506 14441 55678 32393 85453 25336 110320 114169 8894 11180 101401 16094 883 66838 56983 26315 98162 53632 70624 7784 96354 23359 108869 112522 27090 110873 80499 29891 57131 71751 81134 15973 59410 55808 87934 98851 89052 84685 117037 9590 116286 44925 56772 11691 87458 30478 115290 24506 114395 103677 61140 18293 69620 17344 71902 105406 76924 104706 14571 83037 60610 66495 122983 116724 30912 84458 64836 46856 57323 106199 14686 113827 97989 97886 89002 59148 77949 29573 77962 40922 17266 119143 91390 46917 95011 108257 27635 2692 84262 39056 98676 25987 77727 102772 93450 82189 109880 259 59790 7411 21291 77277 105572 74494 13893 77854 119111 69207 55792 95130 35347 17375 50680 63577 77030 67888 37473 14608 99735 64333 120937 46159 34484 106522 94483 21217 57192 36854 108744 67106 97781 69252 96911 63661 93595 82799 46701 97627 121471 26219 98274 3898 4124 74020 32804 90007 28317 40846 9488 55182 88294 101123 13382 103345 94504 77427 114379 37526 24866 101333 89792 101252 12690 87626 63272 62972 99204 77903 120407 3752 101203 80967 52532 96654 5972 30495 73025 70111 17008 101273 81030 73818 93859 56094 14293 72325 47045 67473 92592 72121 101161 116343 85189 118391 98095 51389 4635 109371 21412 94579 61747 [出力例] 49977 9590 45131 125255 45990 131059 99465 86154 114579 120650 86627 98538 103047 115002 42967 69634 66420 64502 57170 94464 84848 38644 7311 7528 98230 99585 66688 111144 34795 102528 121497 57405 4815 11998 93556 15311 31631 1049 29860 40162 13035 94132 91340 117530 88484 117137 8705 21032 60749 54786 |
■参照サイト
AtCoder Regular Contest 137