QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#648657#4890. 这是一道集训队胡策题xlwang100 ✓120ms28576kbC++143.1kb2024-10-17 19:50:212024-10-17 19:50:23

Judging History

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

  • [2024-10-17 19:50:23]
  • 评测
  • 测评结果:100
  • 用时:120ms
  • 内存:28576kb
  • [2024-10-17 19:50:21]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define fr(i,j,k) for(register int i=j;i<=k;++i)
#define rf(i,j,k) for(register int i=j;i>=k;--i)
#define foredge(i,j) for(register int i=head[j];i;i=e[i].nxt)
#define pb push_back
#define Times printf("Time:%.3lf\n",clock()/CLOCKS_PER_SEC)
#define pii pair<int,int>
#define mk make_pair
using namespace std;
inline int read(){
	int x=0;
	bool f=0;
	char c=getchar();
	while(!isdigit(c)) f|=(c=='-'),c=getchar();
	while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
	return f?-x:x;
}
inline void write(int x){
    if(x<0){putchar('-');x=-x;}
    if(x>9)write(x/10);
    putchar(x%10+'0');
}
inline void writeln(int x){write(x); puts("");}
inline void writepl(int x){write(x); putchar(' ');}
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
inline int randfind(int l,int r){return rnd()%(r-l+1)+l;}
//inline void init(){
//	int t=read();
//	while(t--) work();
//}
const int Maxn=5e3+10,mod=998244353;
inline int ksm(int x,int y=mod-2){
    int sum=1;
    while(y){
        if(y&1) sum=1ll*sum*x%mod;
        y=y/2;x=1ll*x*x%mod;
    }return sum;
}
int fac[Maxn],ifac[Maxn];
inline void add(int &x,int y){x+=y;if(x>=mod) x-=mod;}
inline int C(int x,int y){if(x<y || x<0 || y<0) return 0;return 1ll*fac[x]*ifac[y]%mod*ifac[x-y]%mod;}
inline void into(int N){
    fac[0]=ifac[0]=1;
    fr(i,1,N) fac[i]=1ll*fac[i-1]*i%mod;
    ifac[N]=ksm(fac[N]);
    rf(i,N-1,1) ifac[i]=1ll*ifac[i+1]*(i+1)%mod;
}
char c[Maxn][Maxn];
int s1[Maxn],num1[Maxn];
int s2[Maxn],num2[Maxn];
int a1[Maxn],a2[Maxn];
int n;
int v1[Maxn],v2[Maxn];
inline bool cmp(int a,int b){return a>b;}
inline void init(){
    n=read();into(n);
    fr(i,1,n) scanf("%s",c[i]+1);
    fr(i,1,n){
        int now=0;
        fr(j,1,n) now+=(c[i][j]=='1');
        s1[now]++;num1[now]++;a1[i]=now;
    }
    sort(a1+1,a1+n+1,cmp);rf(i,n,1) s1[i]+=s1[i+1];
    fr(j,1,n){
        int now=0;
        fr(i,1,n) now+=(c[i][j]=='1');
        s2[now]++;num2[now]++;a2[j]=now;
    }
    sort(a2+1,a2+n+1,cmp);rf(i,n,1) s2[i]+=s2[i+1];
    fr(i,0,n){
        fr(j,1,n){
            if(j<=i) v1[i]+=a1[j],v2[i]+=a2[j];
            else v1[i]+=n-a1[j],v2[i]+=n-a2[j];
        }
    }
}
inline int getval1(int x){
    if(x==0) return 1;
    if(a1[x]==n) return C(num1[a1[x]],x);
    return C(num1[a1[x]],x-s1[a1[x]+1]);
}
inline int getval2(int x){
    // cout<<"*"<<x<<' '<<a2[x]<<endl;
    if(x==0) return 1;
    if(a2[x]==n) return C(num2[a2[x]],x);
    return C(num2[a2[x]],x-s2[a2[x]+1]);
}
inline void work(){
    int ans=0;
    // fr(i,1,n) cout<<i<<' '<<v1[i]<<' '<<v2[i]<<endl;
    fr(x,0,n) fr(y,0,n){
        int maxn1,maxn2;
        maxn1=v1[x];maxn2=v2[y];
        if(maxn1+maxn2-x*y-(n-x)*(n-y)!=n*n) continue;
        // cout<<x<<' '<<y<<' '<<getval1(x)<<' '<<getval2(y)<<endl;
        add(ans,1ll*getval1(x)*getval2(y)%mod);
    }writeln(ans);
}
signed main(){
	// freopen("input.in","r",stdin);
	// freopen("output.out","w",stdout);
    init();work();
    // printf("\nTIME:%.3lf",(double)clock()/CLOCKS_PER_SEC);
	return 0;
}

这程序好像有点Bug,我给组数据试试?

詳細信息

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 1ms
memory: 3696kb

input:

10
0000000000
0101111001
0101111001
0101111001
0101111001
0101111001
0101111001
0101111001
0101111001
0101111001

output:

591

result:

ok 1 number(s): "591"

Test #2:

score: 5
Accepted
time: 1ms
memory: 3736kb

input:

10
0000000000
0001100000
0001111111
0001111111
0001100000
0001111111
0001110100
0001110100
0001110100
0001110100

output:

47

result:

ok 1 number(s): "47"

Test #3:

score: 5
Accepted
time: 1ms
memory: 3936kb

input:

10
1000000000
1010000000
1010000000
1010111111
1010100111
1010100111
1010100111
1010100100
1010100100
1010100110

output:

30

result:

ok 1 number(s): "30"

Test #4:

score: 5
Accepted
time: 0ms
memory: 7896kb

input:

10
0000110001
0101100000
0100001111
1011000001
0011010000
1010011111
1000111100
1110111101
1000101100
1000110100

output:

2

result:

ok 1 number(s): "2"

Test #5:

score: 5
Accepted
time: 1ms
memory: 4012kb

input:

10
1000010100
1100001111
1111010111
1010000001
1000110111
0100001001
1000111110
0110100010
1010100010
1010110111

output:

2

result:

ok 1 number(s): "2"

Test #6:

score: 5
Accepted
time: 1ms
memory: 4008kb

input:

10
1011001000
1011111011
0111010011
0011110000
0000011100
0101000000
1001100000
1111010011
1110111101
1100010101

output:

2

result:

ok 1 number(s): "2"

Subtask #2:

score: 15
Accepted

Test #7:

score: 15
Accepted
time: 0ms
memory: 3824kb

input:

20
11110010101111111000
01000101111110100000
10110001010110111101
10111111011011110101
10110101011010111101
00010100011011001011
01111111001000101001
10101101011101011100
11011010110101011110
00010100101000001011
00001010100111101100
00100111010010101001
00000010010110110110
11011111100110111100
010...

output:

2

result:

ok 1 number(s): "2"

Test #8:

score: 15
Accepted
time: 0ms
memory: 5716kb

input:

20
01000110110000100100
00010110001100011000
11111000101101101010
10010001100000010100
01101101000000111100
10010111110101011101
00000101010000000110
00001100101111111110
11111110111001101001
00010000001000101011
00010010110110110011
01011011110010011110
01000101111111011101
00010111001101001110
101...

output:

2

result:

ok 1 number(s): "2"

Test #9:

score: 15
Accepted
time: 1ms
memory: 3712kb

input:

20
00000000000000000000
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
10011101011010000010
100...

output:

526847

result:

ok 1 number(s): "526847"

Test #10:

score: 15
Accepted
time: 1ms
memory: 3896kb

input:

20
00000000000000000000
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
11101100001001010011
111...

output:

526335

result:

ok 1 number(s): "526335"

Test #11:

score: 15
Accepted
time: 0ms
memory: 5980kb

input:

20
10000000000000000000
11111000110000000000
11111000110000000000
11111000111111111111
11111000111111111111
11111000111111111111
11111000110000000000
11111000111111111111
11111000110000000000
11111000111111111111
11111000111111111111
11111000111010011011
11111000111010011011
11111000111010011011
111...

output:

740

result:

ok 1 number(s): "740"

Test #12:

score: 15
Accepted
time: 0ms
memory: 3916kb

input:

20
10000000000000000000
11110100100000000000
11110100101111111111
11110100100000000000
11110100100000000000
11110100100000000000
11110100101111111111
11110100100000000000
11110100101111111111
11110100101111111111
11110100100000000000
11110100100010000000
11110100100010000000
11110100100010000000
111...

output:

1150

result:

ok 1 number(s): "1150"

Test #13:

score: 15
Accepted
time: 1ms
memory: 3980kb

input:

20
11111111111111111111
10100111111111111111
10100100000000000000
10100100000000000000
10100111111111111111
10100100000000000000
10100100000000000000
10100111001100101111
10100111001100101111
10100111001100100000
10100111001100101111
10100111001100100000
10100111001100100000
10100111001100101111
101...

output:

189

result:

ok 1 number(s): "189"

Subtask #3:

score: 40
Accepted

Test #14:

score: 40
Accepted
time: 2ms
memory: 5044kb

input:

300
01110011110110110011100111010000101110110001000111111011100101101101101011110101110100110110001110111010101011111010010101001000100011001110110100110000111001011011100000011100000000000001101000010110110000110001110000010110100010110110111000110000100101110011111010001100110111001010000100110110...

output:

2

result:

ok 1 number(s): "2"

Test #15:

score: 40
Accepted
time: 2ms
memory: 7060kb

input:

300
00101101101001110001110111101010000101010101100001110010001101001011011110111000110110101101111100010010011111010011101011110001011011111110001110100110101010100111001110001100111011010110010010111101001001101000000000011101011000111100101000101110111011001111111000111000100111100110101001011101...

output:

2

result:

ok 1 number(s): "2"

Test #16:

score: 40
Accepted
time: 0ms
memory: 5672kb

input:

300
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

936335109

result:

ok 1 number(s): "936335109"

Test #17:

score: 40
Accepted
time: 2ms
memory: 6788kb

input:

300
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

124904823

result:

ok 1 number(s): "124904823"

Test #18:

score: 40
Accepted
time: 1ms
memory: 6092kb

input:

300
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

923149686

result:

ok 1 number(s): "923149686"

Test #19:

score: 40
Accepted
time: 1ms
memory: 5832kb

input:

300
01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

254929271

result:

ok 1 number(s): "254929271"

Test #20:

score: 40
Accepted
time: 2ms
memory: 6620kb

input:

300
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

12177

result:

ok 1 number(s): "12177"

Subtask #4:

score: 5
Accepted

Test #21:

score: 5
Accepted
time: 111ms
memory: 28296kb

input:

5000
0000111111000001000100111100110001110111011000101000110111100011111110110011101001111001111101010001111101110011110101010011010010000000001111000111101111010010110100000110111101100000010111111110001001010100101110100010100000011100000101011011101010011111101011000110001001011010000010000101111...

output:

2

result:

ok 1 number(s): "2"

Test #22:

score: 5
Accepted
time: 106ms
memory: 28424kb

input:

5000
0010011001001111110110000001101010000101010111000001101101011100001001011101010000001111010001101001111000101001011011001000111110010001111011011101010000110000010100010110011010000110111110111100110100001010110010001011010010001001101110000000111110111111000110000011010011100001110011111010001...

output:

2

result:

ok 1 number(s): "2"

Test #23:

score: 5
Accepted
time: 116ms
memory: 28560kb

input:

5000
1100111111010100100110101001011111001111000111111010110110010101011010010001111010101001101110111111100100101111010111001111100001100101111111000010100011000110100010010110111111100001100010000111101011110111100010010000001110011110001110110001000101111010110011111001111001011011110010101000000...

output:

2

result:

ok 1 number(s): "2"

Subtask #5:

score: 35
Accepted

Test #24:

score: 35
Accepted
time: 119ms
memory: 28420kb

input:

5000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

828414647

result:

ok 1 number(s): "828414647"

Test #25:

score: 35
Accepted
time: 117ms
memory: 28232kb

input:

5000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

16621460

result:

ok 1 number(s): "16621460"

Test #26:

score: 35
Accepted
time: 120ms
memory: 28300kb

input:

5000
1010110111100100001010010010100011000101011011111111101001100001101101011001001110101011110101001110010011110111101001011010010001100100111010100100000011101101000100010001011001101100000000000000011001100101111101110010111101000000010001000101110111100011100110101001001000001101111010001111010...

output:

2

result:

ok 1 number(s): "2"

Test #27:

score: 35
Accepted
time: 118ms
memory: 28532kb

input:

5000
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

541497915

result:

ok 1 number(s): "541497915"

Test #28:

score: 35
Accepted
time: 109ms
memory: 28224kb

input:

5000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

288388087

result:

ok 1 number(s): "288388087"

Test #29:

score: 35
Accepted
time: 119ms
memory: 28576kb

input:

5000
0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

352199570

result:

ok 1 number(s): "352199570"

Test #30:

score: 35
Accepted
time: 112ms
memory: 28576kb

input:

5000
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

410201481

result:

ok 1 number(s): "410201481"

Extra Test:

score: 0
Extra Test Passed