T4:
rt
你好,你是这里的森林养护员么?我是 Chinese collect forest 协会的人,来检查大家的工作。
我在种树。
那你为什么在一棵树上爬?
因为我要种树。
这跟你爬树有什么关系啊?
我要种树,初提人让我在树上种树。
......
T3(from awesomegordon):
你好,?我是 Chinese collect f**kingproblems 协会的人,来检查大家的工作。
你为什么要要在结构体里定义一个在结构体里的一个结构体里的一个结构体?
因为我要定义结构体。
这和你在结构体里定义一个在结构体里的一个结构体里的一个结构体有啥关系?
我要定义结构体,出题人让我在结构体里定义一个在结构体里的一个结构体里的一个结构体。
…………
T2:
孩子,你已经玩很久手机了,该停止了。
可是我这局游戏还没玩完。
我记得我上次进来你也是这么说的,你是不是新开了一把?
没有,我这把还没玩完。
可是你已经玩了 1000ms,用了你手机中 512MB 的内存了。
可是不够。
怎么不够?
我这里有 2×106 消消块,消不玩,能再给我 10s 或 1G 么。
可是你消除方块的方法是 O(n) 呀。
常数26,时间不够,空间太少,因此 2×105 以上的块数我随便搞了,花了很多时间!
相信自己,常数26能过数据。
可是有可能超限啊。
相信我,不会超限。
尝试后,sbno333:你***
85分:
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct st{
int tj[29]={};
int d;
void operator=(const st dd){
for(int i=0;i<29;i++){
tj[i]=max(dd.tj[i],tj[i]);
}
}
}f[200009];
int n;
string s;
int ff[2000009];
int zz[2000009];
void _m1(){
for(int i=0;i<200009;i++){
for(int j=0;j<29;j++){
f[i].tj[j]=-1;
}
}
f[0].tj[s[0]-'a']=0;
for(int i=1;i<s.size();i++){
f[i].tj[s[i]-'a']=i;
if(f[i-1].tj[s[i]-'a']!=-1){
int fs;
fs=f[i-1].tj[s[i]-'a'];
f[i].d=1;
if(fs>0){
f[i].d+=f[fs-1].d;
f[i]=f[fs-1];
f[i].tj[s[i]-'a']=i;
}
}
}
int ans;
ans=0;
for(int i=1;i<n;i++){
ans+=f[i].d;
}
cout<<ans;
}
void _m2(){
memset(zz,-1,sizeof(zz));
for(int i=0;i<s.size();i++){
for(int j=i-1;j>=0;j=zz[j]){
if(s[j]==s[i]){
zz[i]=j-1;
ff[i]++;
if(j>0){
ff[i]+=ff[j-1];
}
}
break;
}
if(!ff[i]){
zz[i]=-1;
}
}
int ans;
ans=0;
for(int i=1;i<n;i++){
ans+=ff[i];
}
cout<<ans;
}
signed main(){
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
cin>>n;
cin>>s;
if(n<=200000){
_m1();
}else{
_m2();
}
return 0;
}
100分:
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct st{
int tj[29]={};
int d;
void operator=(const st dd){
for(int i=0;i<29;i++){
tj[i]=max(dd.tj[i],tj[i]);
}
}
}f[2000009];
int n;
string s;
int ff[2000009];
int zz[2000009];
void _m1(){
for(int i=0;i<2000009;i++){
for(int j=0;j<29;j++){
f[i].tj[j]=-1;
}
}
f[0].tj[s[0]-'a']=0;
for(int i=1;i<s.size();i++){
f[i].tj[s[i]-'a']=i;
if(f[i-1].tj[s[i]-'a']!=-1){
int fs;
fs=f[i-1].tj[s[i]-'a'];
f[i].d=1;
if(fs>0){
f[i].d+=f[fs-1].d;
f[i]=f[fs-1];
f[i].tj[s[i]-'a']=i;
}
}
}
int ans;
ans=0;
for(int i=1;i<n;i++){
ans+=f[i].d;
}
cout<<ans;
}
signed main(){
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
cin>>n;
cin>>s;
_m1();
return 0;
}
我f**k,我**********
......