提交记录 3763


用户 题目 状态 得分 用时 内存 语言 代码长度
applese noi18c. 【NOI2018】你的名字 Wrong Answer 0 4 s 129440 KB C++ 2.68 KB
提交时间 评测时间
2018-07-18 17:21:40 2020-07-31 21:33:23
#pragma GCC optimize(3)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool Finish_read;
template<class T>inline void read(T &x){Finish_read=0;x=0;int f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;if(ch==EOF)return;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();x*=f;Finish_read=1;}
template<class T>inline void print(T x){if(x/10!=0)print(x/10);putchar(x%10+'0');}
template<class T>inline void writeln(T x){if(x<0)putchar('-');x=abs(x);print(x);putchar('\n');}
template<class T>inline void write(T x){if(x<0)putchar('-');x=abs(x);print(x);}
/*================Header Template==============*/
const int N=500005,T=26;
int pa[N<<1],son[N<<1][T],dep[N<<1];
int cnt,last;
char Sa[N],Sb[N];
int sa[N],sb[N],lena,lenb;
inline int new_node(int step) {
	dep[++cnt]=step;
	return cnt;
}
inline void SAM(int alp) {
	int p=new_node(dep[last]+1);
	int u=last;
	while(u&&!son[u][alp])son[u][alp]=p,u=pa[u];
	if(!u)pa[p]=1;
	else {
		int v=son[u][alp];
		if(dep[v]==dep[u]+1)
			pa[p]=v;
		else {
			int nv=new_node(dep[u]+1);
			memcpy(son[nv],son[v],sizeof son[nv]);
			pa[nv]=pa[v],pa[v]=pa[p]=nv;
			while(u&&son[u][alp]==v)
				son[u][alp]=nv,u=pa[u];
		}
	}
	last=p;
}
int ts[N<<1],pos[N<<1],cont[N<<1],flag[N<<1];
inline void Sort() {
	int i;
	for(i=1;i<=cnt;i++)
		ts[i]=0;
	for(i=1;i<=cnt;i++)
		ts[dep[i]]++;
	for(i=1;i<=cnt;i++)
		ts[i]+=ts[i-1];
	for(i=1;i<=cnt;i++)
		pos[ts[dep[i]]--]=i;
}
inline void Cal() {
	int p=1,i;
	for(i=0;i<lena;i++) {
		int alp=sa[i];
		cont[son[p][alp]]++;
		p=son[p][alp];
	}
	for(i=cnt;i>=1;i--) {
		int q=pos[i];
		cont[pa[q]]+=cont[q];
	}
}
inline int calc(int x,int y) {
	return 1ll*x*(x+1)/2-1ll*y*(y+1)/2;
}
long long ans;
int f[N];
inline void solve() {
	int i;
	int temp=0,p=1;
	ans=0;
	for(i=0;i<lenb;i++) {
		int d=sb[i];
		if(son[p][d]) {
			temp++;
			p=son[p][d];
		}
		else{
			while(p&&!son[p][d])
				p=pa[p];
			if(!p)
				temp=0,p=1;
			else
				temp=dep[p]+1,p=son[p][d];
		}
		//cout<<cont[p]<<endl;	
		f[i]=temp;
	}
//	for(int i=0;i<lenb;++i)
//		cout<<f[i]<<" ";
//	cout<<endl;
	int lst=0;
	for(int i=0;i<lenb;++i)
		if(f[i+1]!=f[i]+1)
			ans+=calc(f[i],lst),lst=f[i+1]-1;
}
void init() {
	memset(flag,0,sizeof flag);
	memset(cont,0,sizeof cont);
	memset(son,0,sizeof son);
	memset(pa,0,sizeof pa);
	last=cnt=1;
}
inline void File() {
	freopen("name.in","r",stdin);
	freopen("name.out","w",stdout);
}
int main() {
	init();
	scanf("%s",Sa);
	lena=strlen(Sa);
	for(int i=0;i<lena;i++) {
		sa[i]=Sa[i]-'a';
		SAM(sa[i]);
	}
	int q;
	read(q);
	while(q--) {
		scanf("%s",Sb);
		int x,y;ans=0;
		scanf("%d%d",&x,&y);
		lenb=strlen(Sb);
		for(int i=0;i<lenb;i++)
			sb[i]=Sb[i]-'a';
		Sort();
		Cal();
		solve();
		writeln((1ll*lenb*(lenb+1)/2)-ans);
	}
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #110.012 ms110 MB + 716 KBWrong AnswerScore: 0

Testcase #212.45 ms110 MB + 736 KBWrong AnswerScore: 0

Testcase #311.778 ms110 MB + 736 KBWrong AnswerScore: 0

Testcase #418.855 ms110 MB + 756 KBWrong AnswerScore: 0

Testcase #518.428 ms110 MB + 756 KBWrong AnswerScore: 0

Testcase #683.242 ms126 MB + 416 KBWrong AnswerScore: 0

Testcase #783.244 ms126 MB + 400 KBWrong AnswerScore: 0

Testcase #84 s113 MB + 152 KBTime Limit ExceededScore: 0

Testcase #94 s112 MB + 816 KBTime Limit ExceededScore: 0

Testcase #104 s115 MB + 344 KBTime Limit ExceededScore: 0

Testcase #114 s114 MB + 892 KBTime Limit ExceededScore: 0

Testcase #124 s117 MB + 536 KBTime Limit ExceededScore: 0

Testcase #134 s117 MB + 36 KBTime Limit ExceededScore: 0

Testcase #144 s119 MB + 816 KBTime Limit ExceededScore: 0

Testcase #154 s119 MB + 268 KBTime Limit ExceededScore: 0

Testcase #164 s122 MB + 56 KBTime Limit ExceededScore: 0

Testcase #174 s121 MB + 504 KBTime Limit ExceededScore: 0

Testcase #184 s115 MB + 848 KBTime Limit ExceededScore: 0

Testcase #194 s117 MB + 896 KBTime Limit ExceededScore: 0

Testcase #204 s119 MB + 968 KBTime Limit ExceededScore: 0

Testcase #214 s122 MB + 68 KBTime Limit ExceededScore: 0

Testcase #224 s122 MB + 56 KBTime Limit ExceededScore: 0

Testcase #234 s122 MB + 52 KBTime Limit ExceededScore: 0

Testcase #244 s122 MB + 68 KBTime Limit ExceededScore: 0

Testcase #254 s122 MB + 68 KBTime Limit ExceededScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-18 01:10:56 | Loaded in 2 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠