QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#387748 | #5019. 整数 | Iratis | 20 | 105ms | 26472kb | C++20 | 2.0kb | 2024-04-12 19:13:20 | 2024-04-12 19:13:21 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define md(a) a=(a%mod+mod)%mod
#define file(a) freopen(#a".in","r",stdin);freopen(#a".out","w",stdout)
bool ST;
const int N=19,M=262150,mod=998244353;
int n,S,a[N],To[N],b[M],B[M],rec[M],bak[M],p,dp[M],tmp[M],F[M],G[M],Len;
int f[M],las[M],nxt[M];inline void add(int &x,int y){x+=y;if(x>=mod)x-=mod;}
struct num{int a,id;}val[N];inline bool cmp(num a,num b){return a.a>b.a||(a.a==b.a&&a.id<b.id);}
int AND[2][2][2]={{0,1,1,1},{mod-1,1,1,0}};
inline void FWT(int *A,int f[2][2])
{
for(int s=2;s<=Len;s<<=1)for(int i=0;i<Len;i+=s)for(int j=0;j<s/2;j++)
{
int u=A[i+j],t=A[i+j+s/2];
A[i+j]=(f[0][0]*u%mod+f[0][1]*t%mod)%mod;
A[i+j+s/2]=(f[1][0]*u%mod+f[1][1]*t%mod)%mod;
}
}
inline void DP(int bit)
{
for(int i=0;i<n;i++)val[i]={(a[i]>>bit)&1,i};sort(val,val+n,cmp);for(int i=0;i<n;i++)To[val[i].id]=i;
for(int i=0;i<S;i++){rec[i]=nxt[i]=0;for(int t=0;t<n;t++)if((i>>t)&1)rec[i]|=(1ll<<To[t]);bak[rec[i]]=i;}
for(int i=0;i<S;i++)las[rec[i]]=f[i],b[rec[i]]=B[i];p=0;while(p<n&&val[p].a)p++;for(int i=0;i<S;i++)dp[i]=b[i];
for(int t=p;t<n;t++)
{
for(int i=0;i<S;i++)tmp[i]=dp[i],dp[i]=0;
for(int i=0;i<S;i++)
{
if((i>>t)&1)add(dp[i],tmp[i^(1ll<<t)]);
else add(dp[i],tmp[i]),add(dp[i],tmp[i^(1ll<<t)]);
}
}
int Blok=(1<<(n-p));Len=(1<<p);
for(int bl=0;bl<Blok;bl++)
{
int L=bl*Len,R=L+Len;
for(int i=L;i<R;i++)F[i-L]=las[i];for(int i=0;i<Len;i++)G[i]=dp[i^(bl<<p)];
FWT(F,AND[0]),FWT(G,AND[0]);for(int i=0;i<Len;i++)F[i]=F[i]*G[i]%mod;FWT(F,AND[1]);
for(int i=0;i<Len;i++)nxt[i+L]=F[i];
}
for(int i=0;i<S;i++)f[bak[i]]=nxt[i];
}
bool ED;
signed main()
{
cerr<<(&ST-&ED)/1024.0/1024<<endl;ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;S=(1ll<<n);for(int i=0;i<n;i++)cin>>a[i];for(int i=0;i<S;i++){char c;cin>>c;B[i]=(c-'0');}
f[S-1]=1;for(int i=1;i>=0;i--)DP(i);int ans=0;for(int i=0;i<S;i++)add(ans,f[i]);cout<<ans<<'\n';
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 24376kb
input:
2 557860450892773247 1006376652976945084 1001
output:
1
result:
wrong answer 1st numbers differ - expected: '434419861', found: '1'
Test #2:
score: 5
Accepted
time: 0ms
memory: 24288kb
input:
2 1114627670617095929 177024338535020511 1000
output:
1
result:
ok 1 number(s): "1"
Test #3:
score: 0
Wrong Answer
time: 0ms
memory: 24224kb
input:
2 1149393890526355314 1070730158013930700 1001
output:
1
result:
wrong answer 1st numbers differ - expected: '315168037', found: '1'
Test #4:
score: 0
Wrong Answer
time: 0ms
memory: 24360kb
input:
2 971930549804858302 431201925917048822 1001
output:
3
result:
wrong answer 1st numbers differ - expected: '713084688', found: '3'
Test #5:
score: 5
Accepted
time: 8ms
memory: 24684kb
input:
15 3 2 1 3 0 3 2 2 3 0 3 3 3 1 1 111100000011100110100011100000100010011010010011011101110110000011100111101101100011111100111010001010010001001111010011000000110110011111000011100100010100011010110000000010011110101111110110110100011101011101011100110000001100110111101001101001010111011000000110010...
output:
919883
result:
ok 1 number(s): "919883"
Test #6:
score: 5
Accepted
time: 105ms
memory: 26396kb
input:
18 3 0 3 2 3 3 3 3 3 3 3 1 3 3 3 3 1 3 101101001111111010001101010111101111110111100111111011010010011000101111101100011100101111101001001010010110011001001110011101011100001100100000100011001110101101110010011011000001001001000000001001010000010100010101010101010001001110100111001001110001101000111...
output:
812380442
result:
ok 1 number(s): "812380442"
Test #7:
score: 5
Accepted
time: 95ms
memory: 26420kb
input:
18 3 2 3 3 3 3 3 3 3 1 1 1 2 3 1 3 3 3 100101100011011110000000100100001001010001001000110011011111000010001110111011111010001011101101010101111111000111000011110001100111100001110100110100010101111100001001110110000000111100110011011011000110001010100110001101011011011101000110001000101101000110000...
output:
609445751
result:
ok 1 number(s): "609445751"
Test #8:
score: 0
Wrong Answer
time: 3ms
memory: 24208kb
input:
9 774618017057897470 1150648813667465147 936044467577552867 540429591977619391 492984435788926911 706491668336975855 1148409108818935103 1152305623476461243 1151646826418395103 101100111100110000011001010001100101011001010001111000000000000001011100001010001011100110010110100001000101101101101001011...
output:
42435
result:
wrong answer 1st numbers differ - expected: '762304370', found: '42435'
Test #9:
score: 0
Wrong Answer
time: 0ms
memory: 24364kb
input:
9 864195661015236599 828072363954386938 215046877307787767 125420173910435807 863300627424341495 1125890835854768063 538106264396606431 1008449764986412979 1112933880000274175 1111011011101000110000110000110110111101111110011110001110010111100001010001110110111000101011110011001000101011100011011100...
output:
54229
result:
wrong answer 1st numbers differ - expected: '91522040', found: '54229'
Test #10:
score: 0
Wrong Answer
time: 2ms
memory: 24288kb
input:
9 1060294142652751871 270953131468627965 950114304166317032 1023152535943950935 1124721212123772879 1136030244306680786 575888989072637942 576457170017579983 1071468780714196734 10010111011101001111011010000011000000111111000001100001001110001000000000101001001101110110001001111011110111101001000000...
output:
3269
result:
wrong answer 1st numbers differ - expected: '235859607', found: '3269'
Test #11:
score: 0
Wrong Answer
time: 0ms
memory: 24396kb
input:
11 1044692707433249934 1008683100277431676 999797431367270367 1143631656501850799 1098790111790735245 468268805647233519 539233207094867537 414313023104679647 1113992177660166126 1150563014851263359 1146149597257104766 111100100001011011010001100111000010001101110011110101110101010110100111111011000...
output:
28251
result:
wrong answer 1st numbers differ - expected: '238088536', found: '28251'
Test #12:
score: 0
Wrong Answer
time: 4ms
memory: 24432kb
input:
11 1136928866896019455 954477066817884159 139540257629524991 920699090857753087 852006989960417247 557707207097472255 575228611095427007 1006976729003116287 709142041517850567 1136595818501773047 1006109764096082108 100001110101001011001100010000100000111110011110100011000011111011000001010001110001...
output:
270400
result:
wrong answer 1st numbers differ - expected: '770640307', found: '270400'
Test #13:
score: 0
Wrong Answer
time: 0ms
memory: 24428kb
input:
11 1152568556892716543 1152920608551467963 216135265528237819 1116892698712710517 1125524963696923135 990737955748133887 575754796832378359 959086400709851129 571809817905978127 391758946252877613 553053934827077551 100001001101100001010110011000000001110110100101011111010110001101000110111100110011...
output:
122815
result:
wrong answer 1st numbers differ - expected: '12490130', found: '122815'
Test #14:
score: 0
Wrong Answer
time: 3ms
memory: 24440kb
input:
13 431747275278769839 792173935971856335 842168688984356222 709201683711004463 1096549254077341383 432312541824942061 423302887995576278 1152284609275166700 1150353045444060639 858881033326555901 429385610205061119 394803803773730111 792573841785221941 11101010110000000010101000000011010001110011111...
output:
295472
result:
wrong answer 1st numbers differ - expected: '711924090', found: '295472'
Test #15:
score: 0
Wrong Answer
time: 6ms
memory: 24416kb
input:
13 384952197575497562 925188207794820790 819636358341950664 1008806169945307033 485498962656536575 576170342985224059 1152884825316839167 519602798379984887 1148271257506507710 864338725486642591 141147914734645085 945751520335947454 828363124049108987 10111011110011010100110001011011010100001001111...
output:
306913
result:
wrong answer 1st numbers differ - expected: '17257245', found: '306913'
Test #16:
score: 0
Wrong Answer
time: 5ms
memory: 24488kb
input:
13 812148678079544783 531352737042856447 360252648370171639 827797221788122302 1076354330155122647 571657826460300281 995857311985303518 576390067592282047 573059687658290935 1134130623250689782 573953435640528550 1148043723132895167 576443122223672059 11010001100111100001101001010010100111100000010...
output:
2622179
result:
wrong answer 1st numbers differ - expected: '513017470', found: '2622179'
Test #17:
score: 0
Wrong Answer
time: 95ms
memory: 26468kb
input:
18 557601891651940085 863281395625602303 810348831133032447 855679530581929974 1143340273566153982 1142779849869883883 495305789849593903 1141378831228050923 539285017652624765 1151477836095937523 968834653063196607 462735989800959869 567170978455011071 936570564589289083 1089862139502785535 1274543...
output:
228745566
result:
wrong answer 1st numbers differ - expected: '905600077', found: '228745566'
Test #18:
score: 0
Wrong Answer
time: 90ms
memory: 26420kb
input:
18 35461063007254983 250722149174607860 990787107658114938 521176448595639215 1142533318210222071 848423510290851199 936184673027902967 1035761934176939767 1152921455940040799 759980081052254206 841582125096893943 1105339004669119437 1071810531808477044 1072419334446896991 1152903339507575642 131161...
output:
168381591
result:
wrong answer 1st numbers differ - expected: '946673491', found: '168381591'
Test #19:
score: 0
Wrong Answer
time: 96ms
memory: 26472kb
input:
18 526745011001725941 995280101634205694 1150650377238908861 1152780629645981351 378291368993988607 754341611678006135 1133780828220553215 467476844077883365 998548842292821951 1125758065340935934 1074758391215161343 359069688757419477 863137999561424871 459006511440394231 856772308259666431 2832407...
output:
151754478
result:
wrong answer 1st numbers differ - expected: '333911712', found: '151754478'
Test #20:
score: 0
Wrong Answer
time: 95ms
memory: 26424kb
input:
18 1116852845721419519 564031047050710929 1152918474977164029 288041155646291455 647954749928207825 978368260719998815 1141854864204889983 1121382897240509261 576459613035256827 1134273717606465523 1124121994315404271 714513083207720351 1001083345502337005 642993847483219627 1143878547027000662 1139...
output:
76731728
result:
wrong answer 1st numbers differ - expected: '437797272', found: '76731728'