[交互题][二分]Codeforces#415 (Div. 1) 809B. Glad to see you!

来源:互联网 发布:办公软件考试系统 编辑:程序博客网 时间:2024/06/10 01:10

题意

戳这里

题解

第一次做交互题。
要求60次询问之内出结果。可以想到大概用的就是二分之类的方法。
考虑二分,每次怎么才能判断 [L,mid][mid+1,R] 哪一部分一定有点呢?
比较巧妙的办法,询问 (mid,mid+1),就能判断离中间最近的是在哪边,往那一边走一定能找到。
题目要求的是找到两个点,我们先 get(1,n) 找到第一个点 ans1,然后 get(1,ans11),如果找不到就 get(ans1+1,n)。这样一定能完成任务。

#include<cstdio>#include<algorithm>using namespace std;int Query(int x,int y){  // 1: |x..| <= |y..|       printf("1 %d %d\n",x,y); fflush(stdout);    char s[5]; scanf("%s",s);    return s[0]=='T';}int get(int L,int R){    while(L<R){        int m=(L+R)>>1;        if(Query(m,m+1)) R=m;                    else L=m+1;    }    return L;}int n,m,ans1,ans2;int main(){    scanf("%d%d",&n,&m);    ans1=get(1,n);    if(ans1==1) ans2=get(2,n); else    if(ans1==n) ans2=get(1,n-1); else{        ans2=get(1,ans1-1);        if(!Query(ans2,ans1)) ans2=get(ans1+1,n);    }    printf("2 %d %d\n",ans1,ans2);    return 0;}
阅读全文
0 0
原创粉丝点击