QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#944626 | #10211. Philosophical … Balance | xuanxuan001 | WA | 21ms | 12800kb | C++14 | 2.4kb | 2025-03-20 15:22:24 | 2025-03-20 15:22:29 |
Judging History
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'