Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
人生第一次交互题ac!
其实比较水
容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数;否则是偶数。
所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点。
令cntr表示答案为奇数的行数,cntc表示答案为奇数的列数。
那么cntr只能为0或者2,0就表示两个头在同一行,2就表示两个头在不同的行(我们已经找出这两行了)
cntc亦然。
然后cntr与cntc不可能同时为0,因为两个端点不可能既在同一行又在同一列。
所以对于cntr=cntc=2的,我们知道如下图这四个交点的位置上有两个头,再查询4次就行了。总次数为2*n+4<=2004<2019
对于cntr与cntc某一个为0的,即两个端点在同一行(列)的情况,已经确定了某两列(行),就随便选一列(行)二分答案就行了(集体看代码)。总次数为2*n+ ⌈log n⌉<=2010<2019
CODE
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 100005;
int n, r[2], cntr, c[2], cntc;
inline bool query(int A, int B, int C, int D) {
printf("? %d %d %d %d\n", A, B, C, D);
fflush(stdout); int x; scanf("%d", &x); return x&1;
}
bool flg[2][2];
int main () {
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
if(query(i, 1, i, n)) r[cntr++] = i;
if(query(1, i, n, i)) c[cntc++] = i;
}
if(cntr == cntc) {
for(int i = 0; i < 2; ++i)
for(int j = 0; j < 2; ++j)
if(query(r[i], c[j], r[i], c[j]))
flg[i][j] = 1;
putchar('!');
for(int i = 0; i < 2; ++i)
for(int j = 0; j < 2; ++j)
if(flg[i][j] == 1)
printf(" %d %d", r[i], c[j]);
putchar('\n');
fflush(stdout);
return 0;
}
else {
if(!cntr) {
int L = 1, R = n, mid;
while(L < R) {
mid = (L + R) >> 1;
if(query(1, c[0], mid, c[0])) R = mid;
else L = mid + 1;
}
printf("! %d %d %d %d\n", L, c[0], L, c[1]);
fflush(stdout);
}
else {
int L = 1, R = n, mid;
while(L < R) {
mid = (L + R) >> 1;
if(query(r[0], 1, r[0], mid)) R = mid;
else L = mid + 1;
}
printf("! %d %d %d %d\n", r[0], L, r[1], L);
fflush(stdout);
}
return 0;
}
}
Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)的更多相关文章
- Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目:http://codeforces.com/contest/1153/problem/D 题意:给你一棵树,每个节点有一个操作,0代表取子节点中最小的那个值,1代表取子节点中最大的值,叶子节点的 ...
- Codeforces Round #551 (Div. 2)A. Serval and Bus
A. Serval and Bus time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Codeforces Round #551 (Div. 2)B. Serval and Toy Bricks
B. Serval and Toy Bricks time limit per test 1 second memory limit per test 256 megabytes input stan ...
- Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目链接 题意:给你一个有根树,假设有k个叶子节点,你可以给每个叶子节点编个号,要求编号不重复且在1-k以内.然后根据节点的max,minmax,minmax,min信息更新节点的值,要求根节点的值最 ...
- Codeforces Round #551 (Div. 2) F. Serval and Bonus Problem (DP/FFT)
yyb大佬的博客 这线段期望好神啊... 还有O(nlogn)FFTO(nlogn)FFTO(nlogn)FFT的做法 Freopen大佬的博客 本蒟蒻只会O(n2)O(n^2)O(n2) CODE ...
- Codeforces Round #290 (Div. 2) A. Fox And Snake 水题
A. Fox And Snake 题目连接: http://codeforces.com/contest/510/problem/A Description Fox Ciel starts to le ...
- Codeforces Round #534 (Div. 2) D. Game with modulo 交互题
先二分一个区间,再在区间里面二分即可: 可以仔细想想,想明白很有意思的: #include<iostream> #include<cstdio> #include<alg ...
- Codeforces Round #812 (Div. 2) D. Tournament Countdown(交互题)
记录一下第一次写交互题 题目大意:一共有1<<n个人参加一场竞标赛,需要你通过比较两人的胜场来判断谁晋级,最终获得第一名 最多1/3*2^(n+1)次询问,每次询问query(a,b),如 ...
- 【Codeforces】Codeforces Round #551 (Div. 2)
Codeforces Round #551 (Div. 2) 算是放弃颓废决定好好打比赛好好刷题的开始吧 A. Serval and Bus 处理每个巴士最早到站且大于t的时间 #include &l ...
随机推荐
- 用户字符串操作,这里面包括字符串的decode、encode、substract等等操作
工具类描述:用户字符串操作,这里面包括字符串的decode.encode.substract等等操作 package cn.hgnulb; import java.io.UnsupportedEnco ...
- 【CodeForces】1172E. Nauuo and ODT
题解 看了一遍题解(以及代码)但是没写代码-- 后来做梦的时候忽然梦到了这道题--意识到我需要补一下-- 这道题就是,对于每种颜色,把没有染成这种颜色的点标成黑点,然后计算每个联通块的平方 然后每个点 ...
- Python3的内置函数介绍
Python3的官网链接:https://docs.python.org/3/library/functions.html?highlight=built#ascii 内置函数介绍 abs 绝对值函数 ...
- WUSTOJ 1235: 计算矩阵的鞍点(Java)
1235: 计算矩阵的鞍点 题目 输出二维数组中行上为最大,列上为最小的元素(称为鞍点)及其位置(行列下标).如果不存在任何鞍点,请输出"404 not found"(不带引号 ...
- MongoDB增删改
一.数据库操作 显示现有的数据库,命令:show dbs 或者 databases; 示当前使用的数据库,命令:db 切换当前使用的数据库,命令:use 数据库名称 删除数据库,命令:db.dropD ...
- DP动态规划学习笔记——高级篇上
说了要肝的怎么能咕咕咕呢? 不了解DP或者想从基础开始学习DP的请移步上一篇博客:DP动态规划学习笔记 这一篇博客我们将分为上中下三篇(这样就不用咕咕咕了...),上篇是较难一些树形DP,中篇则是数位 ...
- (十五)Activitivi5之多用户任务分配
一.概念 我们在开发的时候,有一种情况是这样的, 我们有一个任务,可以让多个用户中的任何一个人办理即可,比如某个审批任务, 张三,李四,王五他们中的任何一人办理下都行,这时候,我们用到多用户任务分配. ...
- (一)weblogic11g的安装配置
一.安装 找到weblogic安装包,小编这里用的是wls1034_win32.exe版本,双击打开 完成后运行快速启动,打开快速启动界面,配置weblogic.如果没有打开,还可以在开始菜单中找到q ...
- LeetCode 1047. Remove All Adjacent Duplicates In String
1047. Remove All Adjacent Duplicates In String(删除字符串中的所有相邻重复项) 链接:https://leetcode-cn.com/problems/r ...
- EDK2开发环境搭建
EDK2开发环境搭建 来源 https://blog.csdn.net/rikeyone/article/details/80759724 EDK2全称为“uEFI Development Kit”, ...