Codeforces Round #778 (Div. 1 + Div. 2, based on Technocup 2022 Final Round)

A. Maximum Cake Tastiness
排序取最大的两个即可

void slove()
{
    int n;cin>>n;
    int a[n+5];
    for(int i=1;i<=n;i++) cin>>a[i];
    int ans=0;
    sort(a+1,a+n+1);
    ans+=a[n]+a[n-1];
    cout<<ans<<endl;
}

B. Prefix Removals
从前往后判断,直到当前字符在后面不再出现

void slove()
{
    string s;cin>>s;
    string s1="";
    map<char,int>mp;
    int a[s.size()+2];
    memset(a,0,sizeof a);
    for(int i=0;i<s.size();i++){
        mp[s[i]]++;
        a[i]=mp[s[i]];
        //cout<<a[i]<<' ';
    }
    //cout<<endl;
    int flag=-1;
    for(int i=0;i<s.size();i++){
        if(mp[s[i]]-a[i]==0){
            flag=i;
            break;
        }
    }
    for(int i=flag;i<s.size();i++)cout<<s[i];
    cout<<endl;
}

C. Alice and the Cake
dfs将数一直分开即可,遇到出现过的就不往下搜索,同时数字的数量减一,当遍历完正好等于0 的时候说明成功

map<int,int>mp;
int flag=0;
int m=0;
void dfs(int n){
    if(flag) return ;
    if(mp[n]>0){
        mp[n]--;
        m--;
        return ;
    }
    else{
        if(n==1){
            flag=1;
            return ;
        }
        else{
            int a=n/2;
            int b=(n+1)/2;
            dfs(a);
            dfs(b);
        }
    }
}
void slove()
{
    int n;cin>>n;
    int a[n+5];
    int sum=0;
    mp.clear();
    for(int i=0;i<n;i++) {
        cin>>a[i];
        sum+=a[i];
        mp[a[i]]++;
    }
    if(n==1){
        YES;
        return ;
    }
    flag=0;
    m=n;
    dfs(sum);
    if(m==0&&flag==0) YES;
    else NO;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值