1. 程式人生 > >2018-2019 ACM-ICPC, Asia Nanjing Regional Contest E.Eva and Euro coins

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

我們把k個反轉過來,然後周圍一定有一個和這個k個不相同的,然後就變成了k+1個相同的,然後我們可以把這個兩個互換位置,所以,問題就是一個祖瑪遊戲,每次消除連續的k個,然後看剩下的是否相同即可

程式碼:

#include<bits/stdc++.h>
#define xx first
#define yy second
#define mp make_pair
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int,int> 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;
}