C. Poman Numbers 题解(思维+贪心)

题目链接

题目思路

玄学打表发现规律,即最后一个元素一定是正贡献,倒数第二个为负贡献

前面的正负随意分配,然后参考这个题目链接贪心即可

代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const int maxn=1e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-6;
ll base[30],c[30];
ll n,t;
char s[maxn];
signed main(){
    base[0]=1;
    for(int i=1;i<=26;i++){
        base[i]=base[i-1]*2;
    }
    cin>>n>>t>>s+1;
    t-=base[s[n]-'a']-base[s[n-1]-'a'];
    n-=2;
    for(int i=1;i<=n;i++){
       t+=base[s[i]-'a'];
       c[s[i]-'a'+1]++;
    }
    for(int i=26;i>=0;i--){
        while(c[i]--){
            if(t>=base[i]){
                t-=base[i];
            }
        }
    }
    printf(t==0?"Yes\n":"No\n");
    return 0;
}


posted @ 2021-09-06 22:43  hunxuewangzi  阅读(38)  评论(0编辑  收藏  举报