link
题意:
本题为交互题。有一个字符串s,只由字符’a’和’b’组成。每次你可以询问一个字符串,它会返回这两个字符串的编辑距离。为一个字符串经过修改,删除或插入操作得到另一个字符串,两个字符串编辑距离的定义为最小的操作次数,若返回值为0,那么就是字符串s。让你在n + 2操作内得出字符串s(n为字符串s的长度,未知)。
思路:
先问一个a ,问出他的长度,特判一下全b的情况,然后如果问出来是300的话也是全b,坑点=-=,不能询问超过三百的字符串,然后依次枚举位数,看答案的变化,直到问到编辑距离为0为止
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=200010;
struct node{
int t;
int v;
bool operator<(const node&w)const
{
if(t!=w.t)
return t<w.t;
return v<w.v;
}
}q[N];
int sum[N][2];
signed main()
{
// #ifndef ONLINE_JUDGE
// freopen("1.in","r",stdin);
// //freopen("1.out","w",stdout);
// #endif
cout<<"a"<<endl;
fflush(stdout);
int res;
cin>>res;
if(res==300)
{
for(int i=0;i<300;i++)
cout<<"b";
cout<<endl;
fflush(stdout);
return 0;
}
string s;
for(int i=0;i<res+1;i++){
s+='a';
}
cout<<s<<endl;
fflush(stdout);
cin>>res;
if(res==s.size())
{
for(int i=0;i<res-1;i++)
cout<<"b";
cout<<endl;
fflush(stdout);
return 0;
}
int last=res;
for(int i=0;i<s.size();i++)
{
s[i]='b';
cout<<s<<endl;
fflush(stdout);
cin>>res;
if(res==0)
{
cout<<s<<endl;
fflush(stdout);
return 0;
}
if(res>last)
{
res=last;
s[i]='a';
}
else
{
s[i]='b';
}
}
return 0;
}