QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212058#5205. Game of Questions275307894aWA 1ms10228kbC++141.7kb2023-10-13 06:58:592023-10-13 06:58:59

Judging History

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

  • [2023-10-13 06:58:59]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:10228kb
  • [2023-10-13 06:58:59]
  • 提交

answer

#include<bits/stdc++.h>
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
using namespace std;using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned long long;using pii=pair<int,int>;using LL=__int128;
const int N=(1<<17)+5,M=43046721+5,K=600+5,mod=998244353,Mod=mod-1;const db eps=1e-6;const int INF=1e9+7;mt19937 rnd(263082);
int n,m,k,f[N],g[N],ff[N],gg[N];lb dp[N];
char s[N];
void FWT(int *A){
	int i,j,h;
	for(i=2;i<=k;i<<=1) {
		for(j=0;j<k;j+=i) {
			for(h=j;h<j+i/2;h++) A[h]+=A[h+i/2];
		}
	}
}
int p[M],Po[N],To[N];
int main(){
	int i,j,h;scanf("%d%d",&n,&m);k=1<<m-1;
	int tot=k-1;
	for(i=1;i<=n;i++){
		scanf("%s",s+1);
		int z=0;for(j=2;j<=m;j++) z=z<<1|(s[j]=='1');
		if(s[1]=='0') g[(k-1)^z]++,gg[(k-1)^z]++;
		else f[z]++,tot&=z,ff[z]++;
		z=0;for(j=2;j<=m;j++) z=z*3+(s[j]=='1'?2:1);if(s[1]=='1') p[z]++;
	}
	for(Po[0]=i=1;i<=m;i++) Po[i]=Po[i-1]*3;
	for(i=0;i<m-1;i++){
		for(h=0;h<Po[m-1];h+=Po[i]) if(h/Po[i]%3==0) for(j=h;j<h+Po[i];j++) p[j]+=p[j+Po[i]]+p[j+Po[i]*2];
	}
	FWT(f);FWT(g);
// 	inv[1]=1;for(i=2;i<=n;i++) inv[i]=(mod-inv[mod%i])*(mod/i)%mod;
	dp[k-1]=1;
	for(i=0;i<k;i++){
		for(j=0;j<m-1;j++) if(i>>j&1) To[i]+=Po[j];
	}
	cerr<<f[3]<<'\n';
	for(i=k-2;~i;i--){
		for(j=(k-1)^i;j;j=(j-1)&((k-1)^i)) {
			dp[i]+=dp[i^j]*p[To[i]*2+To[j]]/(n-(f[i^j]+g[i^j]));
			// cerr<<p[To[i]*2+To[j]]<<' ';
		}
		// cerr<<i<<' '<<dp[i]<<'\n';
	}
	printf("%.11Lf\n",dp[tot]);
	cerr<<clock()*1.0/CLOCKS_PER_SEC<<'\n';
}
//0 1 0 1 0 1 0 1 0 0 1 1 0 0 0 1 0 1 0

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 6132kb

input:

1 5
11010

output:

1.00000000000

result:

ok found '1.000000000', expected '1.000000000', error '0.000000000'

Test #2:

score: 0
Accepted
time: 1ms
memory: 10220kb

input:

3 3
011
101
110

output:

0.33333333333

result:

ok found '0.333333333', expected '0.333333333', error '0.000000000'

Test #3:

score: 0
Accepted
time: 1ms
memory: 10228kb

input:

6 4
1011
0110
1111
0110
0000
1101

output:

0.16666666667

result:

ok found '0.166666667', expected '0.166666667', error '0.000000000'

Test #4:

score: 0
Accepted
time: 1ms
memory: 8060kb

input:

1 2
00

output:

1.00000000000

result:

ok found '1.000000000', expected '1.000000000', error '0.000000000'

Test #5:

score: 0
Accepted
time: 1ms
memory: 10176kb

input:

1 2
11

output:

1.00000000000

result:

ok found '1.000000000', expected '1.000000000', error '0.000000000'

Test #6:

score: -100
Wrong Answer
time: 0ms
memory: 10204kb

input:

2 5
10011
01111

output:

0.50000000000

result:

wrong answer 1st numbers differ - expected: '0.0000000', found: '0.5000000', error = '0.5000000'