fulinran2026 @ 2024-05-02 15:24:26
事情是这样的,本地爆栈了,调试都调试不了的那种,但是试着交了一下直接过了
所以有大佬知道为什么吗/kk
贴code
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=3e6+5;
int T,n,q;
int cnt,ans;
struct mm
{
int tag,ch[80];
}t[N];
void insert(char s[])
{
int rt=0,n=strlen(s);
for(int i=0;i<n;i++)
{
int y=s[i]-'0';
if(t[rt].ch[y]==0)
t[rt].ch[y]=++cnt;
rt=t[rt].ch[y];
t[rt].tag++;
}
}
int query(char s[])
{
int rt=0,n=strlen(s);
for(int i=0;i<n;i++)
{
int y=s[i]-'0';
if(t[rt].ch[y]==0) return 0;
rt=t[rt].ch[y];
}
return t[rt].tag;
}
int main()
{
scanf("%d",&T);
while(T--)
{
for(int i=0;i<=cnt;i++)
{
for(int j=0;j<=80;j++)
t[i].ch[j]=0;
t[i].tag=0;
}
cnt=0; ans=0;
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
{
char a[N];
scanf("%s",a);
insert(a);
}
for(int i=1;i<=q;i++)
{
char a[N];
scanf("%s",a);
printf("%d\n",query(a));
}
}
return 0;
}
//
by 残阳如血 @ 2024-05-18 12:00:48
@fulinran2026 这是因为 Windows 的缘故吧,实际比赛中栈空间和题目所给的空间时等大的,所以可以开成局部变量。
by kent2017 @ 2024-09-04 10:24:17
洛谷评测机 栈空间=空间限制
比如以下答辩代码到处都是BUG本地RE但洛谷上WA+AC 16pts
#include<bits/stdc++.h>
//#include<windows.h>
using namespace std;
int cnt;
char oulint(int x){
if(x<26){return x+'a';}
if(x<52){return x-26+'A';}
return x-4;
}
int oulchar(char x){
if(x<='z'&&x>='a'){return x-'a';}
if(x<='Z'&&x>='A'){return x+26-'A';}
if(x<='9'&&x>='0'){return x+4;}
return -1;
}
struct node{
int fa,son[62],sons;
};
struct trie{
node nodes[1000000];
void add(string a){
int len=a.length(),p=0;
for(int i=1;i<=len;++i){
if(!(this->nodes[p].son[oulchar(a[i])])){
nodes[p].son[oulchar(a[i])]=++cnt;
nodes[cnt].fa=p;
}
p=nodes[p].son[oulchar(a[i])];
}
}
int finds(string t){
int len=t.length(),p=0;
for(int i=1;i<=len;++i){
if(!nodes[p].son[oulchar(t[i])]){
return 0;
}
p=nodes[p].son[oulchar(t[i])];
}
return this->nodes[p].sons;
}
void cnts(int p){
this->nodes[p].sons=1;
for(int i=0;i<62;++i){
if(nodes[p].son[i]){
cnts(nodes[p].son[i]);
this->nodes[p].sons+=this->nodes[nodes[p].son[i]].sons;
}
}
}
};
int/*signed*/ main(){
// freopen("P8036.in","r",stdin);
// freopen("P8036.out","w",stdout);
// int x;cin>>x;cout<<oulint(x);
// char x;cin>>x;cout<<oulchar(x);
int t;cin>>t;++t;
for(;--t;){
trie tries;
int n,p;cin>>n>>p;
for(int i=1;i<=n;++i){
string a;tries.add(a);
}
tries.cnts(0);
for(int j=1;j<=p;++j){
int kkk;cin>>kkk;
cout<<tries.nodes[kkk].sons<<endl;
}
}
return 0;
}