QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#944626#10211. Philosophical … Balancexuanxuan001WA 21ms12800kbC++142.4kb2025-03-20 15:22:242025-03-20 15:22:29

Judging History

This is the latest submission verdict.

  • [2025-03-20 15:22:29]
  • Judged
  • Verdict: WA
  • Time: 21ms
  • Memory: 12800kb
  • [2025-03-20 15:22:24]
  • Submitted

answer

#include<cstdio>
#define TY int
#define MAXN 200002
#define FOR(i,a,b) for(TY i=(a);i<=(b);i=-~i)
#define fOR(i,a,b) for(TY i=(a);i<(b);i=-~i)
#define ROF(i,a,b) for(TY i=(a);i>=(b);i=~-i)
#define rOF(i,a,b) for(TY i=(a);i>(b);i=~-i)
#define EDG(i,u) for(TY i=hed[u];i;i=nxt[i])
using namespace std;
typedef long long ll;
const TY M=998244353;
typedef long double db;
typedef unsigned long long ull;
TY _abs(TY a){return a<0?-a:a;}
TY maxn(TY a,TY b){return a>b?a:b;}
TY minn(TY a,TY b){return a<b?a:b;}
inline void updmx(TY &x,TY y){if(x<y)x=y;}
inline void updmn(TY &x,TY y){if(x>y)x=y;}
inline void add(TY &x,TY y){if((x+=y)>=M)x-=M;}
TY gcd(TY a,TY b){return b?gcd(b,a%b):a;}
TY qp(TY a,TY b){TY ans=1;do{if(1&b)ans=ans*a%M;a=a*a%M;}while(b>>=1);return ans;}
char getc(){char ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();return ch;}
TY qr(){
	char ch=getchar();TY s=0,x=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')x=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())s=s*10+ch-'0';return x*s;
}void qw(TY a){if(a>9)qw(a/10);putchar(a%10+'0');}
void qw(TY a,char ch){
	if(a<0){a=-a;putchar('-');}
	if(a>9)qw(a/10);putchar(a%10+'0');if(ch)putchar(ch);
}TY lg[MAXN],T=qr(),n,rk[MAXN<<1],sa[MAXN],w[MAXN],t[MAXN],A[MAXN],x,y,ST[18][MAXN];char s[MAXN];
db findans(TY l,TY r){
	if(l==r)return n-sa[l]+1;
	TY k=lg[r-l],p=ST[k][r-(1<<k)];
	if(w[p]>w[ST[k][l]])p=ST[k][l];
	db x=findans(l,p)-w[p],y=findans(p+1,r)-w[p];
	if(x+y<1e-6)return w[p];
	return x*y/(x+y)+w[p];
}int main(){
	fOR(i,2,MAXN)lg[i]=lg[i>>1]+1;
	while(T--){
		scanf("%s",s+1);
		for(n=0;s[n+1];++n);
		fOR(i,0,26)t[i]=0;
		FOR(i,1,n)t[s[i]-'a']=1;
		fOR(i,y=0,26)if(t[i])t[i]=++y;
		FOR(i,1,n)rk[i]=t[s[i]-'a'];
		FOR(i,1,n)rk[n+i]=0;
		for(TY x=1;x<n;x<<=1){
			FOR(i,0,n)t[i]=0;
			FOR(i,1,n)++t[rk[i+x]];
			FOR(i,1,n)t[i]+=t[i-1];
			FOR(i,1,n)A[t[rk[i+x]]--]=i;
			FOR(i,1,n)t[i]=0;FOR(i,1,n)++t[rk[i]];
			FOR(i,1,n)t[i]+=t[i-1];
			ROF(i,n,1)sa[t[rk[A[i]]]--]=A[i];
			y=1;FOR(i,1,n){
				A[sa[i]]=y;if(i==n)break;
				if(rk[sa[i]]!=rk[sa[i+1]]||rk[sa[i]+x]!=rk[sa[i+1]+x])++y;
			}FOR(i,1,n)rk[i]=A[i];if(y==n)break;
		}x=0;FOR(i,1,n){
			y=sa[rk[i]+1];if(x)--x;
			while(i+x<=n&&y+x<=n&&s[i+x]==s[y+x])++x;
			w[rk[i]]=x;
		}fOR(i,1,n)ST[0][i]=i;
		fOR(i,0,lg[n])ROF(j,n-(1<<i+1),1){
			ST[i+1][j]=ST[i][j+(1<<i)];
			if(w[ST[i+1][j]]>w[ST[i][j]])ST[i+1][j]=ST[i][j];
		}printf("%.10Lf\n",findans(1,n));
	}return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 12800kb

input:

3
aba
aaaaaaaaaaa
abcd

output:

0.6666666667
1.0000000000
0.4800000000

result:

ok 3 numbers

Test #2:

score: -100
Wrong Answer
time: 21ms
memory: 10748kb

input:

5000
pwbjrqzjiiprpmmjjoibppwzmfwqbqwqoqzbwbrrpizrwpmromjffzfbbbqfizqppffjwipmfirbbfmmomzmwwrpq
ydloztodvevwelvvhoyphehleynlywpophdnlzdnhvwvhnthztwyytwplyn
pjettohskkwlzinyypwokshlnqysymhccmllscxxzjjnjueotlcmtonzmqs
hengzpzzmtcgcqkpzznirzwlxizdrhbncvlipqmncxrssmeabmxaa
bfjbadvsjytbpiajsycjbduvcbiysxc...

output:

0.2521371052
0.2691560590
0.2420173541
0.5743717516
0.2330061325
1.0000000000
0.2289447287
0.2611209637
1.0000000000
0.3566155913
0.3207700402
0.2278198772
0.2616332667
0.2361161582
0.2309080614
0.3263836769
0.3288923823
0.2169236623
0.2339293996
0.2300852329
0.2497925826
0.2387492107
0.4668973605
0...

result:

wrong answer 4th numbers differ - expected: '0.2795318', found: '0.5743718', error = '0.2948399'