zhangky's blog

By zhangky, history, 4 years ago, In English

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;
}

Full text and comments »

  • Vote: I like it
  • +6
  • Vote: I do not like it