CodeForces 809B Glad to see you!
2024-09-01 06:23:22
题解:
交互题一般都是需要用二分去完成。
在二分时候每次检查左边和右边哪边会和答案更近, 然后在更近的那段新区间去重复检查, 知道区间长度为1。
在检查的时候,可以使得答案更近贴近于左边,或者右边。
代码:
#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const int _inf = 0xc0c0c0c0;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL _INF = 0xc0c0c0c0c0c0c0c0;
const LL mod = (int)1e9+;
const int N = 2e5 + ;
char s[N];
int solve(int l, int r){
while(l != r){
int mid1 = l+r >> ;
int mid2 = mid1 + ;
printf("1 %d %d\n", mid2, mid1);
fflush(stdout);
scanf("%s", s);
if(s[] == 'T') l = mid2;
else r = mid1;
}
return l;
}
int solve2(int l, int r){
while(l != r){
int mid1 = l+r >> ;
int mid2 = mid1+;
if((l+r)% == ){
mid1--;
mid2--;
}
printf("1 %d %d\n", mid1, mid2);
fflush(stdout);
scanf("%s", s);
if(s[] == 'T') r = mid1;
else l = mid2;
}
return l;
}
int main(){
int n, k;
scanf("%d%d", &n, &k);
int p1 = solve(, n);
int p2 = solve2(, p1);
int p3 = solve(p1, n);
int a[] = {p1, p2, p3};
sort(a, a+);
printf("2 %d %d\n", a[], a[]);
fflush(stdout);
return ;
}
最新文章
- php设计模式 装饰器模式
- GDB 调试遇到??的问题
- 新增资产时YTD折旧与累计折旧录入错误如何处理
- Java总结(一):封装——Encapsulation
- 返回页面,主页面不刷新window.history.go(-1),主页面刷新window.location.go(-1)
- LVM的添加与删除
- 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
- Android NDK 下载
- HDU 3265 Posters
- Hadoop2.0 HA集群搭建步骤
- 大话命令之--ss
- git只添加指定类型的文件的.gitignore规则
- Ubuntu 11.04 NFS 配置
- maven常见问题处理(3-4)配置代理服务器
- Eclipse常见设置
- p1184高手之在一起
- 【C++ 继承与派生/知识梳理】
- [PHP] 算法-合并两个有序链表为一个有序链表的PHP实现
- 20165305 苏振龙《Java程序设计》第七周学习总结
- hive命令的3种调用方式