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.

转载于:https://www.cnblogs.com/BlogOfchc1234567890/p/11545309.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值