codeforces1464C. Poman Numbers

https://codeforces.com/contest/1464/problem/C

这个规律也没推出来,知道最后两个是固定符号,前面随便选就是水题了

代码学习自roundgod

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxl=3e5+10;

int n,m,k,cnt,tot,cas,ans;ll x;
int a[maxl],num[maxl],ned[maxl];
bool vis[maxl];
char s[maxl];

inline void prework()
{
	scanf("%d%lld",&n,&x);
	scanf("%s",s+1);
	x-=1ll<<(s[n]-'a');
}

inline void mainwork()
{
	for(int i=1;i<n;i++)
		x+=1ll<<(s[i]-'a');
	ans=0;
	if(x<0)
		return;
	for(int i=1;i<=n-2;i++)
		num[s[i]-'a'+1]++;
	for(int i=60;i>=0;i--)
	if(x&(1ll<<i))
		ned[i]=1;
	for(int i=60;i>=0;i--)
	{
		if(ned[i]&&num[i]) ned[i]-=min(ned[i],num[i]);
		if(i>0)
			ned[i-1]+=2*ned[i];
	}
	if(!ned[0])
		ans=1;
}

inline void print()
{
	puts(ans?"Yes":"No");
}

int main()
{
	int t=1;
	//scanf("%d",&t);
	for(cas=1;cas<=t;cas++)
	{
		prework();
		mainwork();
		print();
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/liufengwei1/article/details/114424510