QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#100047 | #6344. The Best Problem of 2021 | aurelion_sol | AC ✓ | 126ms | 81680kb | C++14 | 3.4kb | 2023-04-24 15:26:23 | 2023-04-24 15:26:26 |
Judging History
answer
#include<bits/stdc++.h>
#define rp(i,a,b) for(int i=a;i<=b;++i)
#define pr(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
//xiaoyaowudi
constexpr int N(2010),p(998244353);
int n,x[N];
void init(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int m,cnt(0);
std::cin>>n>>m;
static bool hv[N];
static std::bitset<N> b[N];
static std::bitset<N> a[N],xb;
for(int i(1);i<=n;++i)
{
static char s[N];std::cin>>s;
for(int j(0);j<m;++j)
{
a[i][m-j-1]=(s[j]=='1');
}
bool st(false);
for(int j(m-1);j>=0;--j) if(a[i][j])
{
if(hv[j])
{
a[i]^=b[j];
}
else
{
hv[j]=st=true;
b[j]=a[i];
break;
}
}
if(!st){std::cout<<0<<std::endl;exit(0);}
}
{
static char s[N];std::cin>>s;
for(int j(0);j<m;++j) xb[m-j-1]=(s[j]=='1');
}
for(int i(m-1);i>=0;--i) if(hv[i]) for(int j(i+1);j<m;++j) if(hv[j] && b[j][i]) b[j]^=b[i];
static std::bitset<N> cur;
for(int j(m-1);j>=0;--j) if(hv[j])
{
std::bitset<N> nw(cur^b[j]);
bool cap(true);
for(int t(m-1);t>=0;--t) if(xb[t]!=nw[t])
{
if(xb[t]<nw[t]) cap=false;
break;
}
if(cap) cur=nw,x[++cnt]=1;
else x[++cnt]=0;
}
if(!x[1]){std::cout<<0<<std::endl;exit(0);}
}
//~xiaoyaowudi
typedef long long ll;
constexpr int q(p-1);
inline int inc(int x,int y){
return x+=y-p,x+=x>>31&p;
}
inline int dec(int x,int y){
return x-=y,x+=x>>31&p;
}
inline int mul(int x,int y){
return ll(x)*y%p;
}
inline void upd(int&x,int y){
x=inc(x,y);
}
int ksm(int x,int y){
int z=1;
for(;y;y>>=1,x=mul(x,x))if(y&1)z=mul(x,z);
return z;
}
int ksm_e(int x,int y){
int z=1;
for(;y;y>>=1,x=ll(x)*x%q)if(y&1)z=ll(x)*z%q;
return z;
}
int v[N],w[N],iw[N],wx[N][2],a2[N],i2[N],h[N][N],g[N][N][2],f[N][N][4],a[N],b[N],c[N];
void init_val(){
rp(i,0,n){
v[i]=ksm(2,ksm_e(2,i));
w[i]=ksm(2,i);
iw[i]=ksm(w[i],p-2);
wx[i][0]=w[i];
wx[i][1]=0;
}
a2[0]=1;
rp(i,1,n){
a2[i]=mul(a2[i-1],w[i]-1);
}
i2[n]=ksm(a2[n],p-2);
pr(i,n,1){
i2[i-1]=mul(i2[i],w[i]-1);
}
}
int main(){
// freopen("1.in","r",stdin);
init();
init_val();
/*
rp(i,1,n){
printf("%d",x[i]);
}
puts("");
*/
h[n+1][0]=1;
pr(i,n,2){
rp(j,0,n-i){
int u=mul(v[j],w[n-i-j]);
h[i][j]=inc(h[i][j],h[i+1][j]);
h[i][j+1]=inc(h[i][j+1],mul(u,h[i+1][j]));
}
}
g[n+1][0][0]=1;
g[n+1][0][1]=1;
pr(i,n,2){
rp(j,0,n-i){
rp(k,0,1){
int t=mul(w[n-i-j],k&&!x[i]?1:v[j]);
upd(g[i][j][k],g[i+1][j][k]);
upd(g[i][j+1][k],mul(t,g[i+1][j][k]));
}
}
if(x[i]){
rp(j,0,n-i){
upd(g[i][j][1],mul(w[n-i-j],g[i+1][j][0]));
}
}
}
f[n+1][0][0]=1;
f[n+1][0][1]=1;
pr(i,n,2){
rp(j,0,n-i){
rp(k,0,3){
int u=mul(w[n-i-j],k==3&&!x[i]?1:v[j]);
upd(f[i][j][k],f[i+1][j][k]);
if(!k||k==3||!x[i]){
upd(f[i][j+1][k],mul(u,f[i+1][j][k]));
}
}
if(x[i]){
upd(f[i][j+1][1],mul(mul(w[n-i-j],v[j]),f[i+1][j][0]));
upd(f[i][j+1][3],mul(w[n-i-j],f[i][j][2]));
}else{
upd(f[i][j][2],mul(w[n-i-j],f[i+1][j][1]));
}
}
}
a[0]=a2[n];
rp(j,1,n){
int x=inc(h[2][j],mul(v[j-1],g[2][j-1][1]));
int y=inc(f[2][j-1][2],mul(v[j-1],f[2][j-1][3]));
a[j]=mul(inc(x,y),a2[n-j]);
}
rp(i,0,n){
int u=mul(i2[i],ksm(2,i*(i-1)/2));
b[i]=i&1?p-u:u;
}
rp(i,0,n){
rp(j,0,i){
c[i]=inc(c[i],mul(b[j],a[i-j]));
}
}
printf("%d\n",c[n]);
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 7800kb
input:
4 4 0001 0010 0100 1000 1101
output:
7364
result:
ok 1 number(s): "7364"
Test #2:
score: 0
Accepted
time: 0ms
memory: 5424kb
input:
3 2 00 00 00 11
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: 0
Accepted
time: 3ms
memory: 9664kb
input:
2 3 110 101 101
output:
1
result:
ok 1 number(s): "1"
Test #4:
score: 0
Accepted
time: 3ms
memory: 9808kb
input:
3 10 1111100110 0011110100 0101100001 1110000001
output:
38
result:
ok 1 number(s): "38"
Test #5:
score: 0
Accepted
time: 1ms
memory: 9928kb
input:
7 13 1000101001000 1000000010000 1010101011111 1001100100111 1111111101100 0101010101110 1101100010100 1000010011001
output:
744450298
result:
ok 1 number(s): "744450298"
Test #6:
score: 0
Accepted
time: 4ms
memory: 12196kb
input:
100 100 1111010111010001011111110010101001001101000000000000011000001100101000100011100011000000110000001010 1001001110111010100100010111100010111110101100101000010111001011111010111100111000000011101010100111 000011010111000100110100010010011101001111100110111000100101010001101100101011000111101101...
output:
19562313
result:
ok 1 number(s): "19562313"
Test #7:
score: 0
Accepted
time: 7ms
memory: 17880kb
input:
400 500 1011011011010010111110101001010011000100001111000111111111001111100010101011110011010010011100100100111111000111001110111100101010000000100100011011011001011100100000000100001100001010100010111000110011000100101001010110110100110101000011011011011100111110010100101000011001100000001100001000...
output:
681985268
result:
ok 1 number(s): "681985268"
Test #8:
score: 0
Accepted
time: 48ms
memory: 34868kb
input:
999 1997 011101110101100100111101100000000100001110010001010100011010111010101101011100001000010001110100110111101101010111010011101111011001011100110110101011111011000111101011011000010101100101001110000111010101111100000100100101110000111001010101110110000001111111100110110011110100101000011100011...
output:
435150194
result:
ok 1 number(s): "435150194"
Test #9:
score: 0
Accepted
time: 115ms
memory: 78672kb
input:
1901 2000 10000111000111010000000000100110001100110010011001101110001011000001011000010111101110111001111000010110110100010100010101011111011101100111010101010001010010111010001011000001011010100011000101101010001110111100000101110110011001101111101111000100001010011101011110001100110001100000111110...
output:
9254020
result:
ok 1 number(s): "9254020"
Test #10:
score: 0
Accepted
time: 118ms
memory: 79924kb
input:
1984 2000 11111101001011101001011011010011000001100000101000001001111000100010011011000110110110100000001100000000001111101001111010111110000000010000000111111001010111101101110000111110010111001011011111010010110001011100110101000110000100010100100101010111101100000011110010010100101011101001110110...
output:
870006511
result:
ok 1 number(s): "870006511"
Test #11:
score: 0
Accepted
time: 49ms
memory: 6164kb
input:
2000 2000 00010001100000101100000110010101010101110010001000000100010010110010001100110000001110100111010110100110101010101111011100001110100011001000010001000011100111010100110101000111010010010111001001101100100000101001111111001111101001000101001011101001010010010101011110111001101101101001001000...
output:
0
result:
ok 1 number(s): "0"
Test #12:
score: 0
Accepted
time: 1ms
memory: 7700kb
input:
11 11 10000000000 01000000000 00100000000 00010000000 00001000000 00000100000 00000010000 00000001000 00000000100 00000000010 00000000001 10111110000
output:
312889397
result:
ok 1 number(s): "312889397"
Test #13:
score: 0
Accepted
time: 0ms
memory: 11088kb
input:
100 100 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
554554135
result:
ok 1 number(s): "554554135"
Test #14:
score: 0
Accepted
time: 21ms
memory: 35168kb
input:
1000 1000 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
944188930
result:
ok 1 number(s): "944188930"
Test #15:
score: 0
Accepted
time: 78ms
memory: 80632kb
input:
1999 1999 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
753324940
result:
ok 1 number(s): "753324940"
Test #16:
score: 0
Accepted
time: 88ms
memory: 80320kb
input:
2000 2000 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
489943678
result:
ok 1 number(s): "489943678"
Test #17:
score: 0
Accepted
time: 100ms
memory: 80044kb
input:
2000 2000 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
458543942
result:
ok 1 number(s): "458543942"
Test #18:
score: 0
Accepted
time: 1ms
memory: 7860kb
input:
37 100 0000000000100000010101011000010111111000000000000000000000000000000000001110100110101000000010110000 0111100011011110101011110100101001011000000000110010001010110100000000010000100000111011000000100000 0001110011110000001100011000010011001000000000000000000000000000000000000000000000000000010...
output:
807297668
result:
ok 1 number(s): "807297668"
Test #19:
score: 0
Accepted
time: 2ms
memory: 12148kb
input:
71 93 100010100111111001011100000000011001101101010001011001110001101110010000001000001000000000011 110100111110010001000110000101111010111111000111011010100001010000010110011000000100000000000 110010010110000000010001010100000011000100000010011100100000100100101100010100001100000010000 000101010010...
output:
50935767
result:
ok 1 number(s): "50935767"
Test #20:
score: 0
Accepted
time: 2ms
memory: 5376kb
input:
101 114 010101111101011101100001000100001001000100011100111111110010001111101001100100000110100101010110000000000000001000 101010000011100100000001100000110000111001111011000010010101001011110110100101011101111111111110111010000000000000 11011100100101010100101100000101100000010100000010010110101010...
output:
0
result:
ok 1 number(s): "0"
Test #21:
score: 0
Accepted
time: 4ms
memory: 11800kb
input:
17 2000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010101111100001010111000001111010110101100011000011011111110001011001011010111110111110000110011101111011010110101011010100110001111110110110101000101110100110011001000010000001010...
output:
526829746
result:
ok 1 number(s): "526829746"
Test #22:
score: 0
Accepted
time: 3ms
memory: 7996kb
input:
30 1999 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
708057099
result:
ok 1 number(s): "708057099"
Test #23:
score: 0
Accepted
time: 0ms
memory: 5776kb
input:
54 2000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
0
result:
ok 1 number(s): "0"
Test #24:
score: 0
Accepted
time: 38ms
memory: 29372kb
input:
791 1999 101011000010100101111110010001001001000000000001111100001000101100011110001010010011111110111010100011111010001110000001100010000011001110110011011011110110101100010010110111011000101111010100101110110010100011100100011001100000000001000001010100000000100111011000101111100100001000011010001...
output:
64451741
result:
ok 1 number(s): "64451741"
Test #25:
score: 0
Accepted
time: 38ms
memory: 33380kb
input:
944 2000 110101011100010000001010011011000001001001101001001011101110100000001000000010101011111001101010110100011101110100110010110000011100011111000001011110100111011101110010100100110111001110110001101010011101100010100100000010110101000101111000101110011000111000111111101110001101101110111110001...
output:
996119909
result:
ok 1 number(s): "996119909"
Test #26:
score: 0
Accepted
time: 40ms
memory: 41416kb
input:
1102 1999 10001010010010110101001000110000010000000110101001010111100100000110001111111100111001000111000111110100101101010110111110110001111011110101111001101100101110001011100001100000000000111111111000111010000111100010011010100001001011110111011110100001000100111000100001000010111001111011110001...
output:
855516290
result:
ok 1 number(s): "855516290"
Test #27:
score: 0
Accepted
time: 39ms
memory: 5952kb
input:
1931 2000 01101111100011101110100101000110011110000111000001010001011111010110011001111110110010111000100010111101001100001100001100010101000011001000110001011101111001000111101011011100011110010100001111111000101111000110000000000010110101110001000001011111001000001001100110101100100010101010010000...
output:
0
result:
ok 1 number(s): "0"
Test #28:
score: 0
Accepted
time: 118ms
memory: 81308kb
input:
1944 1999 10000110101111110110111101101000111110100010000011101101000011101100110000110001110000100000100101011111100100111000100110011111110111011100100000111000101110011100101011000011101101010001111110110100101101001011010011111111011111001101010000101011110010010110110101110000000111010100111101...
output:
52786402
result:
ok 1 number(s): "52786402"
Test #29:
score: 0
Accepted
time: 44ms
memory: 4460kb
input:
1977 2000 10011110110110110011001100011011011110111110001001101000101110100111011100011101001100100101110101010001100011001110111011101101100010000010100010001011011011001111011010111011100010101010101111101100001000111011100010111000000101111110100001111011111111111111110101101001101001111100011100...
output:
0
result:
ok 1 number(s): "0"
Test #30:
score: 0
Accepted
time: 98ms
memory: 81636kb
input:
2000 2000 01110010111000111001110000110111011110010010111001000001100101101011000001010111111010001100110000101001001000000000011001101101010001010011010000111011111101001110110010110101110101100100000011110100100010110001110010101001000110100100001001001111000111001011110110101100101011011011101010...
output:
3964016
result:
ok 1 number(s): "3964016"
Test #31:
score: 0
Accepted
time: 50ms
memory: 6156kb
input:
1994 1999 00001100011011001011110111100001111001010110101100010010111001011000100111011110000010100111100001101101100000101111101111001001011001000111111011010110001111001100110000100001101001011001001011100101000101010000110001101000100110110010011010000001000110001010101101111100010110001010101000...
output:
0
result:
ok 1 number(s): "0"
Test #32:
score: 0
Accepted
time: 52ms
memory: 6292kb
input:
1997 2000 01111000101001101011000100101111110000011100111100101100111100110000100101010001011110111100101000001001000110100110111101011101010100010110101011010010000100000110011111100000100011000110001110000111011010110001001001000001110101011011011000101111010000010101101111110100110011110100101000...
output:
0
result:
ok 1 number(s): "0"
Test #33:
score: 0
Accepted
time: 122ms
memory: 81680kb
input:
2000 2000 00110111110110101110100001011000000101001011010011111001100000001001101100111111100001100010111101001110101001101010111011111000000110101101101110100111110101111110010000001001010100111101011010100000010001110100100010010100101010100110011101011110111100111110101110111010010111010010100010...
output:
385756366
result:
ok 1 number(s): "385756366"
Test #34:
score: 0
Accepted
time: 119ms
memory: 80348kb
input:
1988 1999 10101010110010100000101100110010001110101111010010001011010100100010101111001010100110100101100100111101000001000110001011110000001110000000110000001111000100101100000000111011011011110111101000001110111111000110011011111011010000010011100010010110111010000011010001011100010001011001100000...
output:
534584509
result:
ok 1 number(s): "534584509"
Test #35:
score: 0
Accepted
time: 61ms
memory: 6288kb
input:
2000 2000 00100000011001010111100000100001011101010011001010100100100001100000000100010110000110010111010000100110010000010001110100010100111001000110111001011101101110111000000111000000111101011010000110010011110011010000010101000111100100100001101001100010101101011111001010001011101001100001011010...
output:
0
result:
ok 1 number(s): "0"
Test #36:
score: 0
Accepted
time: 44ms
memory: 4312kb
input:
1995 2000 10010000010101100111011100110001101101000100010011110100110111110000000111010000111101011000101000111000010010010111000010101110110100011100111010110110110100111101010100000110001010010001011001000100011110101100110111010110101010100100011010101100001010111111000100101110001101000000010010...
output:
0
result:
ok 1 number(s): "0"
Test #37:
score: 0
Accepted
time: 126ms
memory: 80276kb
input:
1999 1999 11011110110011001100010110011001000101010101001001010101111111000111100000001101101101101010001111010000011101100110100111011010011011001101010011001100011111010100001000100100100111010111001000000010101100100010001111100100101110100010010010101000000110101011101001110010111111011101000101...
output:
678369480
result:
ok 1 number(s): "678369480"
Test #38:
score: 0
Accepted
time: 46ms
memory: 4500kb
input:
1999 2000 11000110010001011100111010011110110100101101000010111101001010100000100100011101011000110000101011011111110101001101111010010010010001011110101001010000010100110110100110011110011101001100000001110100001100110111011001110000110110000101110011110010110100110011010111011001011010111000000110...
output:
0
result:
ok 1 number(s): "0"