提交记录 3878


用户 题目 状态 得分 用时 内存 语言 代码长度
mangoyang noi18c. 【NOI2018】你的名字 Wrong Answer 68 779.964 ms 348228 KB C++11 2.25 KB
提交时间 评测时间
2018-07-18 19:28:30 2020-07-31 21:56:54
/*pragram by mangoyang*/
#include<cstdio>
#include<algorithm>
#include<ctype.h>
#include<vector>
#include<cstring>
#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);
	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.967 ms87 MB + 640 KBAcceptedScore: 4

Testcase #217.787 ms87 MB + 844 KBAcceptedScore: 4

Testcase #318.061 ms88 MB + 124 KBAcceptedScore: 4

Testcase #4134.641 ms178 MB + 280 KBAcceptedScore: 4

Testcase #5129.663 ms175 MB + 416 KBAcceptedScore: 4

Testcase #6219.259 ms292 MB + 196 KBAcceptedScore: 4

Testcase #7218.276 ms292 MB + 212 KBAcceptedScore: 4

Testcase #8116.143 ms132 MB + 308 KBAcceptedScore: 4

Testcase #953.629 ms129 MB + 68 KBAcceptedScore: 4

Testcase #10250.039 ms181 MB + 484 KBAcceptedScore: 4

Testcase #11118.255 ms181 MB + 852 KBAcceptedScore: 4

Testcase #12442.5 ms233 MB + 712 KBAcceptedScore: 4

Testcase #13198.606 ms234 MB + 428 KBAcceptedScore: 4

Testcase #14607.493 ms286 MB + 596 KBAcceptedScore: 4

Testcase #15289.75 ms285 MB + 640 KBAcceptedScore: 4

Testcase #16772.168 ms339 MB + 800 KBAcceptedScore: 4

Testcase #17387.214 ms334 MB + 716 KBAcceptedScore: 4

Testcase #18629.15 ms282 MB + 24 KBWrong AnswerScore: 0

Testcase #19678.748 ms300 MB + 916 KBWrong AnswerScore: 0

Testcase #20729.17 ms319 MB + 980 KBWrong AnswerScore: 0

Testcase #21765.161 ms339 MB + 764 KBWrong AnswerScore: 0

Testcase #22779.964 ms339 MB + 968 KBWrong AnswerScore: 0

Testcase #23767.797 ms339 MB + 508 KBWrong AnswerScore: 0

Testcase #24770.141 ms340 MB + 68 KBWrong AnswerScore: 0

Testcase #25771.15 ms339 MB + 352 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2025-08-13 19:22:42 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠