关键
用到了有向完全图的一些性质定理,还有就是缩点
可以有两种理解:
1.大的肯定可以,然后判断这个点可不可以,问一定可以的就行了,如果可以把win打死,那就一定可以(度数相同的点,性质是一样的,这个不太懂)
2.找缩点之后入度为0的那个集合,也就是起点,这个就是比较玄学了。内部的边是i(i-1)/2,外部的边是i(n-i),满足这个条件就可以了。
总之:就是和i*(i-1)/2有关,好像是兰道定理,然后就是度数相同的点,性质差不多
代码
#include <bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
int n,ans[305];
pii a[305];
int query(int x) {
cout<<"? "<<x<<' ';
for(int i=1;i<=n;i++)
cout<<(i!=x);
cout<<endl;
int y;cin>>y;
return y;
}
int main() {
cin>>n;
for(int i=1;i<=n;i++)
a[i]={query(i),i};
sort(a+1,a+1+n,greater<pii>());
int sum=0;
for(int i=1;i<=n;i++) {
sum+=a[i].first;
if(sum==(i*(i-1)/2+i*(n-i))) {
for(int j=1;j<=i;j++)
ans[a[j].second]=1;
break;
}
}
cout<<"! ";
for(int i=1;i<=n;i++)cout<<ans[i];
return 0;
}
标签:缩点,pii,int,305,2023,using,hello
From: https://www.cnblogs.com/basicecho/p/17026388.html