Codeforces 1103

A.

水题

Code

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    int cnt0=0,cnt1=0;
    for(char i:s){
        if(i=='0')cout<<(cnt0?"1 1\n":"3 1\n"),cnt0^=1;
        else cout<<(cnt1?"1 1\n":"1 3\n"),cnt1^=1;
    }
    return 0;
}

B.

特判 \(a=1\)
先询问 \((i,2i)\) 倍增出一个区间 \(2^x,2^{x+1}\) ,然后询问 \((2^x,2^x+i)\) 二分出答案。
正确性请自行理解。

Code

#include<bits/stdc++.h>
using namespace std;
char s[10];
char query(int x,int y){
    printf("? %d %d\n",x,y);
    fflush(stdout);
    scanf("%s",s);
    if(*s=='e')exit(0);
    return *s;
}
int main(){
    while(scanf("%s",s),*s=='s'){
        if(query(0,1)=='x'){
            printf("! 1\n");
            fflush(stdout);
            continue;
        }
        int i;
        for(i=2;;i*=2){
            if(query(i,i/2)=='y')break;
        }
        int l=i/2,r=i,mid,ans=-1;
        while(l<=r){
            mid=(l+r)>>1;
            if(query(mid,i/2)=='y')ans=mid,r=mid-1;
            else l=mid+1;
        }
        printf("! %d\n",ans);
        fflush(stdout);
    }
    return 0;
}

C.

猜你喜欢

转载自www.cnblogs.com/BlogOfchc1234567890/p/11545309.html