hello 2023 E

关键

用到了有向完全图的一些性质定理,还有就是缩点
可以有两种理解:
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;
}
posted @ 2023-01-05 00:09  basicecho  阅读(26)  评论(0)    收藏  举报