QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#4045 | #1002. 快速 OR 卷积 | DoorKickers | 100 ✓ | 39ms | 7992kb | C++11 | 1.8kb | 2020-05-12 15:23:46 | 2021-12-19 04:48:49 |
Judging History
answer
#include<cstdio>
#include<iostream>
#include<tuple>
#include<algorithm>
const int mod = 998244353,inv2 = mod + 1 >> 1;
typedef long long ll;
inline static const void reduce(int&x){x+=x>>31&mod;}
inline static const void mulor(int*a,int*b,int*c,int lm){
if(!(lm/=2))return void(*c=ll(*a)**b%mod);
for(int i=0;i<lm;++i)reduce(a[i+lm]+=a[i]-mod),reduce(b[i+lm]+=b[i]-mod);
mulor(a,b,c,lm),mulor(a+lm,b+lm,c+lm,lm);
for(int i=0;i<lm;++i)reduce(c[i+lm]-=c[i]);
}
inline static const void muland(int*a,int*b,int*c,int lm){
if(!(lm/=2))return void(*c=ll(*a)**b%mod);
for(int i=0;i<lm;++i)reduce(a[i]+=a[i+lm]-mod),reduce(b[i]+=b[i+lm]-mod);
muland(a,b,c,lm),muland(a+lm,b+lm,c+lm,lm);
for(int i=0;i<lm;++i)reduce(c[i]-=c[i+lm]);
}
inline static const void mulxor(int*a,int*b,int*c,int lm){
if(!(lm/=2))return void(*c=ll(*a)**b%mod);
for(int i=0;i<lm;++i){
std::tie(a[i],a[i+lm])=std::make_tuple(a[i]+a[i+lm],a[i]-a[i+lm]);
std::tie(b[i],b[i+lm])=std::make_tuple(b[i]+b[i+lm],b[i]-b[i+lm]);
reduce(a[i+lm]),reduce(b[i+lm]),reduce(a[i]-=mod),reduce(b[i]-=mod);
}
mulxor(a,b,c,lm),mulxor(a+lm,b+lm,c+lm,lm);
for(int i=0;i<lm;++i)std::tie(c[i],c[i+lm])=std::make_tuple(ll(c[i]+c[i+lm])*inv2%mod,ll(c[i]-c[i+lm]+mod)*inv2%mod);
}
int n;
int a[1 << 17],b[1 << 17],c[1 << 17];
int d[1 << 17],e[1 << 17],f[1 << 17];
int g[1 << 17],h[1 << 17],i[1 << 17];
int main(){
std::ios::sync_with_stdio(false),std::cin.tie(0);
std::cin >> n;
for(int i=0;i<1<<n;++i)std::cin >> a[i],d[i]=g[i]=a[i];
for(int i=0;i<1<<n;++i)std::cin >> b[i],e[i]=h[i]=b[i];
mulor(a,b,c,1<<n);
// muland(d,e,f,1<<n);
// mulxor(g,h,i,1<<n);
for(int i=0;i<1<<n;++i)std::cout << c[i] << ' ';
// std::cout << '\n';
// for(int i=0;i<1<<n;++i)std::cout << f[i] << ' ';
// std::cout << '\n';
// for(int i=0;i<1<<n;++i)std::cout << ::i[i] << ' ';
}
详细
Test #1:
score: 10
Accepted
time: 28ms
memory: 7532kb
input:
17 124509 43148 30036 427 97271 60489 64241 76825 4009 76967 84571 117325 73241 90178 5186 80520 93883 79481 2509 39860 126174 45713 73401 8180 94887 40378 121436 17363 74917 88371 16053 94054 114520 120062 76983 81923 22314 14501 21964 76249 108362 68265 31494 67029 71536 60341 126629 6371 12896 75348 37728 19584 71666 128187 28959 92158 48837 72063 93454 71099 58008 32224 104094 64117 75909 66992 6477 8341 13799 119989 129672 118176 68839 55664 32125 84675 101256 264 89433 83093 15332 38977 11...
output:
332271930 667780257 165371735 944741494 541193760 60819242 388772827 806098677 917577552 616874696 473878514 24257510 729130827 541958215 345089469 751619027 791030961 768536204 510057884 568583644 169371348 329172153 860962430 617638071 934927204 164895278 316656065 532761770 414433832 800892069 66843846 423957592 755624562 438789946 354462122 510607471 888160608 494147513 444194399 804991797 189330702 393766460 24603425 922056327 759550358 2284998 515328656 17414838 317052529 776278305 9494938...
result:
ok 131072 numbers
Test #2:
score: 10
Accepted
time: 25ms
memory: 7832kb
input:
17 36752 91405 113178 66785 57776 27049 14105 50816 126428 71672 64143 39460 38197 55537 64791 57136 77167 24441 17208 72914 103566 12433 95292 99400 72931 87413 42219 121505 2215 35098 74285 122864 61392 104564 81396 8263 27479 121109 26059 16264 7129 40833 85331 26854 82091 81584 4163 120393 126162 59605 73772 9713 90264 54843 39622 2647 89623 71841 47053 130662 15869 124293 10240 120728 65088 106871 54279 105351 53267 109966 50034 64479 45932 40199 85589 101227 36172 122053 103384 16262 12932...
output:
939371310 149333873 587178446 825853712 537141249 124155102 48912865 93006905 857153769 306076077 793447870 483847580 71004984 628668155 607757259 982619397 400224969 943044827 407529823 22606386 45050945 76695773 812465366 817818619 549714008 59549137 864285136 868217575 388615863 21889550 284862432 736058721 512266820 295002368 978111620 272757599 759400699 919209245 133471531 489149846 903562817 718133159 640046684 155833664 19697091 341691019 216945651 575445718 362507208 808286618 862796162...
result:
ok 131072 numbers
Test #3:
score: 10
Accepted
time: 33ms
memory: 7624kb
input:
17 96034 106604 12109 32979 121185 53439 36655 24610 8941 122660 57077 60257 15660 77565 62143 92979 94478 62819 65184 49982 80233 117829 116981 89699 56220 22561 92042 72394 7246 52764 106590 94799 1199 5015 48737 86905 98879 98030 17044 52804 3814 61592 127881 87386 68041 114929 24849 88708 110931 10156 64212 78219 53927 41712 90017 76287 111549 115072 48747 105420 63458 20232 21690 126981 108849 16481 3788 71076 71882 103387 106097 25694 76597 116195 105230 20261 33028 22810 114901 15909 3502...
output:
36312323 136266769 388804901 729829153 670129105 55969553 866313155 373129528 315600479 798117353 633554607 91786773 937791571 288664632 597923432 221508999 830904670 185125646 271486775 170104650 868489867 720669656 356613770 842058155 919644426 359751798 635677011 139273418 122664237 434248213 589652657 245473102 536502485 123727117 551632526 216673052 596875440 904511635 59502101 958296485 201444614 691557812 107855003 193714641 844944091 874130572 979785470 273125918 383048030 831834230 7723...
result:
ok 131072 numbers
Test #4:
score: 10
Accepted
time: 37ms
memory: 7220kb
input:
17 121871 110308 120518 8665 22228 94745 92246 64093 93667 117841 100636 17150 75897 14703 116965 108907 124221 108924 94240 121613 3258 16064 12136 84580 88087 57894 114009 73555 38433 114752 88289 80539 73456 40303 75594 52079 52412 14784 89880 38237 61760 126768 91685 67388 40707 127457 63803 111824 14640 103477 21807 77075 14431 79528 115043 450 24670 51445 106655 88981 127208 34667 32283 56007 49281 61390 2243 92574 37086 110729 107699 93997 7189 108521 57833 45900 65845 110527 56750 44117 ...
output:
912218547 871072809 636392703 585179604 533706087 409870669 347697980 480795031 403024111 781289821 302698304 364913633 227664261 257683313 941445918 24251527 977254370 452754418 535927544 42990609 328533794 386498269 698486057 450103307 435394493 5910871 771324352 537279549 189288366 35024462 484723546 508300225 279532642 184225770 922287989 725914445 916215140 693105956 652856433 44038395 184376061 763797108 262023495 783285035 101807951 642410185 14335656 877143195 117381323 217282003 6911698...
result:
ok 131072 numbers
Test #5:
score: 10
Accepted
time: 39ms
memory: 7728kb
input:
17 35951 130793 107125 57211 73996 78374 83006 49577 24571 106953 21342 119979 68979 100154 92448 110792 115652 66102 23377 112025 35255 4627 5996 23414 75844 14817 130314 19849 30706 114143 105946 122979 44595 532 124693 82679 107873 87080 45941 68218 15412 98405 118030 28481 43193 25345 91548 47808 114646 34696 21418 12168 5000 91532 15633 43759 37583 119721 16806 60433 2944 127615 18075 43349 80430 4740 35763 108489 98042 52319 120980 67650 41378 49374 85861 4913 29715 35621 121028 51686 7142...
output:
568284521 728117622 133739795 53240563 322253966 944216949 156214966 677841365 647707101 582810206 144003878 861166195 121466046 671288104 760650303 837116747 226581420 290829299 91883355 816143112 183565226 78573937 716050667 645655138 760754922 571950962 644604944 401862830 853003498 196203140 687277630 939825094 943551104 796256609 959582877 462826324 830021054 669701380 741808553 389430219 486096748 142091402 784893227 536174462 716734512 447338056 578015400 847554625 701651880 887301422 542...
result:
ok 131072 numbers
Test #6:
score: 10
Accepted
time: 33ms
memory: 7280kb
input:
17 102591 40347 108824 81303 56176 57940 57716 37113 59294 44350 48146 91881 54254 26028 61016 35513 92934 76275 50633 124430 65828 70491 38696 31954 47620 127680 49288 54187 74475 25182 12525 72036 108877 128567 103517 72538 100254 112886 18584 128727 36527 97554 21037 119327 87995 18618 96812 52384 45984 58186 712 40789 36170 37328 98914 28529 72424 88213 77186 52509 127552 85140 31028 6169 36884 33217 87258 39290 51379 122165 411 45826 15269 54360 87292 81290 95896 81359 112749 120162 115166 ...
output:
985250863 538558988 260054259 436348331 924703113 774735602 106570779 529389582 600769592 806883331 654173432 187096271 756178561 375048444 380978504 220638338 80462801 431688569 196200955 160280657 79753806 975811691 293589231 584187045 537391921 238716529 792588315 42527357 996518662 549078028 832680723 70110773 833796358 641729435 571975537 721225398 665335708 149097622 601485638 139094486 720787493 461386281 951954098 917594487 155533423 594383260 463364324 989026081 239514172 409307507 3854...
result:
ok 131072 numbers
Test #7:
score: 10
Accepted
time: 38ms
memory: 7592kb
input:
17 127428 85865 116777 3459 124929 87421 30366 82767 112747 68307 65862 125284 10690 50350 111307 28547 96969 125267 101936 13988 59089 88548 56409 38660 41030 46677 53847 85569 61935 114561 49594 123862 11091 13304 37157 80751 60871 55454 112612 19613 58288 73159 114113 51825 95859 35778 90613 12312 73839 60876 79859 86384 52655 36159 49821 74802 72144 116037 59009 9756 57650 83597 14230 108535 87894 39391 6637 62338 101742 88942 85119 121104 82538 115414 103584 74955 23264 14838 122542 122673 ...
output:
462479512 961471405 771729412 920957877 863153366 223981761 4605935 330978505 78099483 980195979 671065103 72006898 969621659 343849138 69488185 219079434 853848750 181984167 689692238 143575449 762894360 464966336 494752517 532472028 530553052 585243596 716965596 372217083 956701430 486576776 272432625 498672324 582010757 27457471 511539804 39040137 73553434 595077869 400917359 942263857 166581682 469814554 419500774 455306262 214177389 396467830 794819406 389433551 943982999 709022123 91910789...
result:
ok 131072 numbers
Test #8:
score: 10
Accepted
time: 27ms
memory: 7520kb
input:
17 35580 34314 94720 81972 65872 60570 23597 73880 66667 109478 88323 125759 97368 56941 51355 44963 101929 12700 119668 48282 102293 101880 43175 60318 63219 92752 65135 73263 23634 59482 36643 121393 17810 21130 127704 23292 20298 76577 1179 93497 1550 80965 40786 8552 42883 25829 36556 100477 90067 47337 130747 45917 42814 95466 4788 14500 121293 77471 111300 4699 28777 101378 56150 24421 12088 110488 86938 53443 47925 99652 115192 27500 119104 108212 115371 83343 94136 37794 104512 86706 876...
output:
118445781 59446522 851821806 393415259 36135337 139036293 256687205 746321642 414021002 845022317 622652352 161771926 186937491 949166338 279376161 844871905 293917373 989365073 225065990 66576171 165437622 85537306 68530516 388786497 742829497 152022706 76982459 89457527 706877256 912238444 325667708 390736796 494367712 164456298 977648975 895891859 284422948 540544825 454790905 116310918 353626596 309851647 170837276 858528130 589717379 132319978 431096748 372111087 74133191 165199165 86489245...
result:
ok 131072 numbers
Test #9:
score: 10
Accepted
time: 32ms
memory: 7892kb
input:
17 104562 89771 86105 12783 47137 87255 117319 120507 87279 38277 108372 43088 125402 106080 81047 100869 18195 88890 46861 85140 93579 60981 58949 48700 59165 67346 20782 5743 2412 98256 106076 22120 78853 11669 10065 104043 35096 8637 88493 55579 9440 109609 58792 110019 26451 21305 94103 78654 115619 121603 55894 75461 130734 116695 78943 34430 86735 53812 17720 30652 77251 19794 51537 80749 58086 115703 81626 5636 19178 128242 33944 61142 79380 39625 125346 85754 90046 33571 80224 38877 1239...
output:
501392912 629873495 69684616 418531308 867820995 928467117 568874196 156918 380600443 762244520 361863025 758074527 490630157 407208874 419870779 522288613 625350500 956627357 635171048 650245285 612433119 2976546 784823556 975139355 884141115 452654220 415380948 1799698 443879883 329518250 111833948 183361829 417585973 83554653 227077810 197115687 948037899 815836678 733092419 592408011 977404030 317829538 473550079 753508563 405003522 173877973 455337275 530206662 484568814 643545951 947678045...
result:
ok 131072 numbers
Test #10:
score: 10
Accepted
time: 37ms
memory: 7992kb
input:
17 90819 29573 128897 44256 58993 15984 19251 62716 5081 68339 42457 32799 120123 46259 3336 117200 54420 91611 21887 112785 6579 98799 15069 36175 8672 25819 27479 98062 100264 80008 27878 118935 14272 42304 39739 36143 128188 15189 71608 22551 115811 29743 6041 39766 117568 56307 87897 29118 22421 128828 115016 70274 48947 44522 4827 19006 59852 114940 116166 25686 28941 6750 107919 86094 35274 58203 106762 54683 2109 102604 93929 67829 113799 60923 96846 43660 22228 60258 106736 40950 44220 6...
output:
858793301 994685133 722674719 485964251 720997810 444135378 705257132 683181144 584928328 29250485 991801266 430765524 188887907 871096011 718607664 768629353 589676607 954366998 929523570 301388929 902808322 632621358 384864927 571542618 917434949 114578771 725725656 19295164 395715783 458332680 391905009 533849169 134527132 429633492 63648406 695729106 215609009 687083587 300495325 837818622 73598167 249899669 763631913 423401979 308537257 451546454 863544878 670756754 948305258 764778270 2128...
result:
ok 131072 numbers