提交记录 3874


用户 题目 状态 得分 用时 内存 语言 代码长度
mangoyang noi18c. 【NOI2018】你的名字 Wrong Answer 68 780.395 ms 348240 KB C++ 2.22 KB
提交时间 评测时间
2018-07-18 19:23:59 2020-07-31 21:56:06
/*pragram by mangoyang*/
#include<bits/stdc++.h>
#define inf (0x7f7f7f7f)
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
typedef long long ll;
using namespace std;
template <class T>
inline void read(T &x){
    int f = 0, ch = 0; x = 0;
    for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
    for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - 48;
    if(f) x = -x;
}
const int N = 3500005;
ll ans, n, all;
char s[N]; int Q;
struct SuffixAutomaton{
	vector<int> g[N], v;
	ll dep[N], sz[N], dd[N];
	int ch[N][26], fa[N], tail, size;
	inline SuffixAutomaton(){ size = tail = 1; }
	inline int newnode(int x){ return dep[++size] = x, size; }
    inline void ins(int c, int ff){
        int p = tail, np = newnode(dep[p] + 1);
        if(!ff) sz[np] = 1; else v.push_back(np);
        for(; p && !ch[p][c]; p = fa[p]) ch[p][c] = np;
        if(!p) return (void) (fa[np] = 1, tail = np);
        int q = ch[p][c];
        if(dep[q] == dep[p] + 1) fa[np] = q;
        else{
            int nq = newnode(dep[p] + 1);
            fa[nq] = fa[q], fa[np] = fa[q] = nq;
            if(ff == 1) sz[nq] = sz[q];
            for(int i = 0; i < 26; i++) ch[nq][i] = ch[q][i];
            for(; p && ch[p][c] == q; p = fa[p]) ch[p][c] = nq;	
        }tail = np;
    }
	inline void addedge(){
		for(int i = 2; i <= size; i++) g[fa[i]].push_back(i);
	}
	inline void dfs(int u){
		for(int i = 0; i < g[u].size(); i++)
			dfs(g[u][i]), sz[u] += sz[g[u][i]];
	}	
	inline ll calc(char *s){
		tail = 1;
		v.clear(); ll len = strlen(s), ans = 0, all = 0;
		for(int i = 0; i < len; i++) ins(s[i] - 'a', 1);
		for(int i = 0; i < v.size(); i++){
			int u = v[i];
			for(int p = u; p; p = fa[p]) {
				if(dd[p]) break;
				if(sz[p]) ans += dep[p] - dep[fa[p]];
				all += dep[p] - dep[fa[p]], dd[p] = 1;
			}
		}
		for(int i = 0; i < v.size(); i++){
			int u = v[i];
			for(int p = u; p; p = fa[p]){
				if(!dd[p]) break; dd[p] = 0;
			}
		}
		return all - ans;
	}	
}van;
int main(){
	scanf("%s", s); n = strlen(s), read(Q);
	//if(Q == 1) return Dark::solve(), 0;
	for(int i = 0; i < n; i++) van.ins(s[i] - 'a', 0);
	van.addedge(), van.dfs(1);
	while(Q--){
		int l, r;
		scanf("%s", s), read(l), read(r);
		printf("%lld\n", van.calc(s));
	}
	return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #117.61 ms87 MB + 644 KBAcceptedScore: 4

Testcase #217.901 ms87 MB + 848 KBAcceptedScore: 4

Testcase #318.04 ms88 MB + 128 KBAcceptedScore: 4

Testcase #4135.047 ms178 MB + 288 KBAcceptedScore: 4

Testcase #5130.262 ms175 MB + 420 KBAcceptedScore: 4

Testcase #6217.713 ms292 MB + 208 KBAcceptedScore: 4

Testcase #7216.814 ms292 MB + 216 KBAcceptedScore: 4

Testcase #8116.284 ms132 MB + 312 KBAcceptedScore: 4

Testcase #953.84 ms129 MB + 72 KBAcceptedScore: 4

Testcase #10250.174 ms181 MB + 488 KBAcceptedScore: 4

Testcase #11118.987 ms181 MB + 864 KBAcceptedScore: 4

Testcase #12441.362 ms233 MB + 720 KBAcceptedScore: 4

Testcase #13199.698 ms234 MB + 432 KBAcceptedScore: 4

Testcase #14605.514 ms286 MB + 600 KBAcceptedScore: 4

Testcase #15290.613 ms285 MB + 644 KBAcceptedScore: 4

Testcase #16772.4 ms339 MB + 808 KBAcceptedScore: 4

Testcase #17389.258 ms334 MB + 720 KBAcceptedScore: 4

Testcase #18629.223 ms282 MB + 28 KBWrong AnswerScore: 0

Testcase #19679.082 ms300 MB + 920 KBWrong AnswerScore: 0

Testcase #20727.196 ms319 MB + 984 KBWrong AnswerScore: 0

Testcase #21767.557 ms339 MB + 768 KBWrong AnswerScore: 0

Testcase #22780.395 ms339 MB + 972 KBWrong AnswerScore: 0

Testcase #23767.158 ms339 MB + 516 KBWrong AnswerScore: 0

Testcase #24771.939 ms340 MB + 80 KBWrong AnswerScore: 0

Testcase #25772.551 ms339 MB + 364 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-17 20:43:30 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠