Codeforces 730B:Minimum and Maximum(交互式问题)
2024-09-01 01:47:44
http://codeforces.com/problemset/problem/730/B
题意:一个交互式问题,给出一个n代表有n个数字,你可以问下标为x和y的数的大小,会给出">","<"或"=",要求询问次数不能超过 ,最后输出最小的数和最大的数的下标。
思路:很新奇的题目。先将两两比较整理出一个max数组和min数组,这个时候前后较大的一个会在max数组中,较小的会在min数组中,这个时候询问了n/2次。接着我们只要对每个组进行比较,因为较大的已经在max数组里面了,我们只要递推求得较大的,同理,也可以递推求得较小的。最后的答案就是最后的组了。
记得每次printf之后要fflush(stdout)。
#include <bits/stdc++.h>
using namespace std;
int ma[], mi[]; int main() {
int t;
scanf("%d", &t);
while(t--) {
int n;
scanf("%d", &n);
char s[]; int cnt = ;
for(int i = ; i < n; i += , cnt++) {
printf("? %d %d\n", i, i + );
fflush(stdout);
scanf("%s", s);
if(s[] == '>') ma[cnt] = i, mi[cnt] = i + ;
else ma[cnt] = i + , mi[cnt] = i;
}
if(n & ) { ma[cnt] = n, mi[cnt] = n; cnt++; }
for(int i = ; i < cnt; i++) {
printf("? %d %d\n", ma[i-], ma[i]);
fflush(stdout);
scanf("%s", s);
if(s[] == '>') ma[i] = ma[i-];
printf("? %d %d\n", mi[i-], mi[i]);
fflush(stdout);
scanf("%s", s);
if(s[] == '<') mi[i] = mi[i-];
}
printf("! %d %d\n", mi[cnt-], ma[cnt-]);
fflush(stdout);
}
return ;
}
最新文章
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
- SQL Server 2014新特性——Buffer Pool扩展
- 使用代理(WebProxy)爬虫
- Snapchat面经(师兄的)
- Labview实现脉波调制( PAM )
- Java NIO1
- 聊聊 #pragma 和 // MARK:
- 转JSONObject put,accumulate,element的区别
- codeforces C. Valera and Tubes
- 1、在eclipse中导入Java的jar包方法---JDBC【图文说明】
- NodeJS技巧
- 中小学Python编程语言教学
- rbac权限控制,基于无线分类
- A记录、CNAME和URL转发区别
- Flex(ActionScript)与JavaScript交互的两种方式示例
- React系列文章:Babel编译JSX生成代码
- JavaScript HTML DOM,BOM
- PipelineDB 1.0.0 docker 运行
- InnoDB的哈希算法
- ESP8266 station模式下建立client、server TCP连接
热门文章
- 食谱API自由和开放接口-为了发展自己的健康厨房APP应用
- bigdata_mac下安装spark_scala
- 关于idea maven工程创建struts2入门配置及案例
- Post utf-8 请求
- XML序例化工具类
- No module named import_export.admin Django python
- .Net Core中使用NodeJs加解密DES,MD5,AES,REA
- 配置 Visual Studio Tools for Apache Cordova
- Windows 10 (IIS 10)安装Microsoft Web Farm Framework Version 2.2 for IIS7问题
- RedHat 7.3 修改ASM磁盘绑定路径