I solve a problem1538E — Funny Substrings. ↵
↵
But I found a new test to hack myself. The hack test is :↵
↵
input↵
↵
↵
~~~~~↵
1↵
4↵
a := h↵
b := ahaabc↵
c = b + a↵
d = a + c↵
~~~~~↵
↵
↵
↵
output↵
↵
~~~~~↵
1↵
~~~~~↵
↵
↵
↵
But my code output 0. I want provide these test but I don't know how to provide my test.↵
↵
My submissions id is 120211661. There is my code.↵
↵
~~~~~↵
#include<cstdio>↵
#include<algorithm>↵
#include<iostream>↵
#include<string>↵
#include<map>↵
#include<cstring>↵
#define int long long↵
↵
using namespace std;↵
↵
struct Node{↵
int val;↵
string pre,suf;↵
Node(string _s="")↵
{↵
val=0;↵
int len=min((int)_s.size(),3ll);↵
if(_s.size()!=0)pre=_s.substr(0ll,len); ↵
if(_s.size()!=0)suf=_s.substr(max((int)_s.size()-3,0ll),len);↵
for(int i=0;i<=(int)(_s.size()-4ll);i++)↵
{↵
if(_s.substr(i,4)=="haha") ↵
++val;↵
}↵
}↵
friend Node operator + (Node a,Node b)↵
{↵
Node ret=Node();↵
if(a.pre.size()<3||b.pre.size()<3)↵
{↵
ret=Node(a.suf+b.pre);↵
ret.val+=a.val+b.val;↵
}↵
else↵
{↵
ret.pre=a.pre;ret.suf=b.suf;↵
ret.val=a.val+b.val+Node(a.suf+b.pre).val;↵
}↵
return ret;↵
}↵
↵
};↵
↵
int t,n;↵
↵
signed main()↵
{↵
// freopen("in.txt", "r", stdin);↵
cin>>t;↵
while(t--)↵
{↵
cin>>n;↵
map<string,Node>mp;↵
string last;↵
while(n--)↵
{↵
string x,opt;↵
cin>>x>>opt;↵
last=x;↵
if(opt==":=")↵
{↵
string s;↵
cin>>s;↵
mp[x]=Node(s);↵
}↵
else↵
{↵
string s1,s2;↵
cin>>s1>>s2>>s2;↵
mp[x]=mp[s1]+mp[s2];↵
}↵
}↵
cout<<mp[last].val<<'\n';↵
}↵
return 0;↵
}↵
~~~~~↵
↵
↵
But I found a new test to hack myself. The hack test is :↵
↵
input↵
↵
↵
~~~~~↵
1↵
4↵
a := h↵
b := ahaabc↵
c = b + a↵
d = a + c↵
~~~~~↵
↵
↵
↵
output↵
↵
~~~~~↵
1↵
~~~~~↵
↵
↵
↵
But my code output 0. I want provide these test but I don't know how to provide my test.↵
↵
My submissions id is 120211661. There is my code.↵
↵
~~~~~↵
#include<cstdio>↵
#include<algorithm>↵
#include<iostream>↵
#include<string>↵
#include<map>↵
#include<cstring>↵
#define int long long↵
↵
using namespace std;↵
↵
struct Node{↵
int val;↵
string pre,suf;↵
Node(string _s="")↵
{↵
val=0;↵
int len=min((int)_s.size(),3ll);↵
if(_s.size()!=0)pre=_s.substr(0ll,len); ↵
if(_s.size()!=0)suf=_s.substr(max((int)_s.size()-3,0ll),len);↵
for(int i=0;i<=(int)(_s.size()-4ll);i++)↵
{↵
if(_s.substr(i,4)=="haha") ↵
++val;↵
}↵
}↵
friend Node operator + (Node a,Node b)↵
{↵
Node ret=Node();↵
if(a.pre.size()<3||b.pre.size()<3)↵
{↵
ret=Node(a.suf+b.pre);↵
ret.val+=a.val+b.val;↵
}↵
else↵
{↵
ret.pre=a.pre;ret.suf=b.suf;↵
ret.val=a.val+b.val+Node(a.suf+b.pre).val;↵
}↵
return ret;↵
}↵
↵
};↵
↵
int t,n;↵
↵
signed main()↵
{↵
// freopen("in.txt", "r", stdin);↵
cin>>t;↵
while(t--)↵
{↵
cin>>n;↵
map<string,Node>mp;↵
string last;↵
while(n--)↵
{↵
string x,opt;↵
cin>>x>>opt;↵
last=x;↵
if(opt==":=")↵
{↵
string s;↵
cin>>s;↵
mp[x]=Node(s);↵
}↵
else↵
{↵
string s1,s2;↵
cin>>s1>>s2>>s2;↵
mp[x]=mp[s1]+mp[s2];↵
}↵
}↵
cout<<mp[last].val<<'\n';↵
}↵
return 0;↵
}↵
~~~~~↵
↵