AtCoder Beginner Contest 337 E-Bad Juice

E-Bad Juice

题目描述:有 n 杯果汁,其中一杯是发霉的,喝了发霉的果汁会拉肚。

现在你不知道哪杯是发霉的,但明天你要把这些果汁因此你想去坑你的好基友,让他们喝下这些果汁。每个基友可以喝很多杯果汁,每杯果汁可以被很多基友喝。

为了得罪尽量少的人,请求出最少需要给多少基友喝果汁,并构造出一种方案。

接下来用一个字符串 s 给出你的方案中每个人的窜稀情况,1 代表拉肚,0 代表没有拉肚。你需要据此输出发霉的果汁编号。

解法:

二进制的经典应用,每一次个人让他喝所有编号二进制表示在第 i 位为 1 的所有果汁, 最后根据评测机回答字符串,依次统计答案数字的二进制位,输出即可。

代码:

复制代码
#include<bits/stdc++.h>
using namespace std;
int n,ans;
char a[105];
int main(){
    ios::sync_with_stdio(0); 
    cin>>n;
    cout<<ceil(log2((double)n))<<endl;
    for(int i=0;i<ceil(log2((double)n));i++){
        vector<int> v;
        for(int j=0;j<n;j++){
            if(j&(1<<i)){
                v.push_back(j); 
            }
        }
        cout<<v.size();
        for(int j=0;j<v.size();j++){
            cout<<" "<<v[j]+1; 
        }
        cout<<endl;
    }
    cin>>a;
    for(int i=0;i<ceil(log2((double)n));i++){
        if(a[i]=='1'){
            ans+=(1<<i);
        }
    }
    cout<<ans+1;
    return 0;
}
复制代码
posted @   21xf2257  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示