2018-2019 ACM-ICPC, Asia Nanjing Regional Contest E.Eva and Euro coins

题目链接:http://codeforces.com/gym/101981/attachments

 

我们把k个反转过来,然后周围一定有一个和这个k个不相同的,然后就变成了k+1个相同的,然后我们可以把这个两个互换位置,所以,问题就是一个祖玛游戏,每次消除连续的k个,然后看剩下的是否相同即可

 

代码:

#include
#define xx first
#define yy second
#define mp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair pii;
const int MAXN=1e6+5;
int n,k;
char s[MAXN],t[MAXN];
int st[MAXN],sz[MAXN];
string doit(char x[])
{
	if(k==1) return "";
	int len=0;
	for(int i=1;i<=n;i++)
	{
		if(len&&st[len]==x[i])
		{
			sz[len]++;
			if(sz[len]==k)
				len--;
		}
		else
		{
			len++;
			st[len]=x[i];
			sz[len]=1;
		}
	}
	string ret="";
	for(int i=1;i<=len;i++)
	{
		for(int j=1;j<=sz[i];j++)
			ret+=st[i];
	}
	return ret;
}
int main()
{
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	scanf("%d%d",&n,&k);
	scanf("%s",s+1);
	scanf("%s",t+1);
	string A=doit(s);
	string B=doit(t);
	if(A==B) puts("Yes");
	else puts("No");
	return 0;
}

 

你可能感兴趣的:(codeforces)