https://atcoder.jp/contests/abc337/tasks/abc337_e
交互题
一定要输出endl,不然一直TLE,别问我咋知道的,还检查不出来!!!
题意:有n杯果汁,有一杯喝了会拉肚子,最少找几个人,能测出哪一杯是坏的
(一个人可以在不同的杯子里喝一口)
用二进制解决
将杯数用二进制表示
我们需要几个人,每个人分别测的是2的几次方倍
这样就可以分清到底是那一杯出了问题
因为如果所有人都没窜西,所以剩下的一定是坏的
所以只需要和n-1杯就够了
得到每个人需要喝哪些,和哪些人窜西之后
通过看这些人共同喝了哪一杯就可以得出答案了
#define int ll
int n;
void solve(){
cin >> n;
int t=n-1,sum=0;
while(t){
t/=2;
sum++;
}
cout << sum << endl;
for(int i=0;i<sum;i++){
int s=0;
for(int j=1;j<=n;j++){
if(j&(1<<i))
s++;
}
cout << s;
for(int j=1;j<=n;j++){
if(j&(1<<i))
cout << ' ' << j ;
}
cout << endl;
}
string ss;
cin >> ss;
int ans=0;
int l=ss.size();
for(int i=0;i<l;i++){
if(ss[i]=='1'){
ans+=(1<<i);
}
}
if(ans==0){
ans=n;
}
cout << ans << endl;
}