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 ;
}

最新文章

  1. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
  2. SQL Server 2014新特性——Buffer Pool扩展
  3. 使用代理(WebProxy)爬虫
  4. Snapchat面经(师兄的)
  5. Labview实现脉波调制( PAM )
  6. Java NIO1
  7. 聊聊 #pragma 和 // MARK:
  8. 转JSONObject put,accumulate,element的区别
  9. codeforces C. Valera and Tubes
  10. 1、在eclipse中导入Java的jar包方法---JDBC【图文说明】
  11. NodeJS技巧
  12. 中小学Python编程语言教学
  13. rbac权限控制,基于无线分类
  14. A记录、CNAME和URL转发区别
  15. Flex(ActionScript)与JavaScript交互的两种方式示例
  16. React系列文章:Babel编译JSX生成代码
  17. JavaScript HTML DOM,BOM
  18. PipelineDB 1.0.0 docker 运行
  19. InnoDB的哈希算法
  20. ESP8266 station模式下建立client、server TCP连接

热门文章

  1. 食谱API自由和开放接口-为了发展自己的健康厨房APP应用
  2. bigdata_mac下安装spark_scala
  3. 关于idea maven工程创建struts2入门配置及案例
  4. Post utf-8 请求
  5. XML序例化工具类
  6. No module named import_export.admin Django python
  7. .Net Core中使用NodeJs加解密DES,MD5,AES,REA
  8. 配置 Visual Studio Tools for Apache Cordova
  9. Windows 10 (IIS 10)安装Microsoft Web Farm Framework Version 2.2 for IIS7问题
  10. RedHat 7.3 修改ASM磁盘绑定路径