专栏文章
题解:CF2037E Kachina's Favorite Binary String
CF2037E题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mir31q8j
- 此快照首次捕获于
- 2025/12/04 14:56 3 个月前
- 此快照最后确认于
- 2025/12/04 14:56 3 个月前
交互题,记得用
endl 或者 cout.flush() 清空缓存区。询问次数最大为 ,设 。
先考虑无解的情况,显然是 时不能确定答案。
然后遍历 ,考虑如果 ,则一定有 。所以当 时,。但这样有一个问题,如果 为 ,那么开头的 也都不会有贡献。所以找到第一个不等于 的 ,说明 中有 个 ,所以开头就有 个 。
CPP先考虑无解的情况,显然是 时不能确定答案。
然后遍历 ,考虑如果 ,则一定有 。所以当 时,。但这样有一个问题,如果 为 ,那么开头的 也都不会有贡献。所以找到第一个不等于 的 ,说明 中有 个 ,所以开头就有 个 。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;
const int N=1e4+5;
int n;
int s[N];
int query(int l,int r)
{
int x;
cout<<"? "<<l<<" "<<r<<' '<<endl;
cin>>x;
return x;
}
int k[N];
void solve()
{
cin>>n;
for(int i=1;i<=n;i++) s[i]=0;
for(int i=2;i<=n;i++) k[i]=query(1,i);
if(k[n]==0)
{
cout<<"! IMPOSSIBLE "<<endl;
return ;
}
for(int i=2;i<=n;i++) if(k[i]>k[i-1]) s[i]=1;
for(int i=2;i<=n;i++)
if(s[i])
{
for(int j=1;j<=i-1-k[i];j++) s[j]=1;
break;
}
cout<<"! ";
for(int i=1;i<=n;i++) cout<<s[i];
cout<<' '<<endl;
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
#endif
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;
cin>>T;
while(T--) solve();
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...