Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
47052 . 【模拟赛3】我要 AK 了 C++ 通过 100 20 MS 8784 KB 1024 2022-03-19 11:06:11

Tests(20/20):


#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define fz(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) #define put(x) putchar(x) #define eoln put('\n') #define space put(' ') #define int long long inline int read(){ int x=0,neg=1;char c=getchar(); while(!isdigit(c)){ if(c=='-') neg=-1; c=getchar(); } while(isdigit(c)) x=x*10+c-'0',c=getchar(); return x*neg; } inline void print(int x){ if(x<0){ putchar('-'); print(abs(x)); return; } if(x<=9) putchar(x+'0'); else{ print(x/10); putchar(x%10+'0'); } } int n,nxt[1000005]; char s[1000005]; inline void getnext(){//求next数组 int j=0; nxt[1]=0; for(int i=2;i<=n;i++){ while(j!=0&&s[j+1]!=s[i]) j=nxt[j]; if(s[j+1]==s[i]) j++; nxt[i]=j; } } signed main(){ cin>>n>>s+1; getnext(); int ans=0; fz(i,1,n){ int j=i; while(nxt[j]) j=nxt[j]; if(nxt[i]) nxt[i]=j; ans+=i-j; } cout<<ans<<endl; return 0; }


测评信息: