Codechef August Challenge 2018 : Interactive Matrix
首先整个矩阵可以被分为很多小矩阵,小矩阵内所有行的单调性是一样的,所有列的单调性是一样的。
考虑如何在这样一个小矩阵中找出答案。我的策略是每次取四个角中最大值和最小值的点,这样可以每次删掉一行或一列,代价就是行数+列数。
稍微思考一下小矩形可能的分布,一是行分两块,列分两块,这样总共4个小矩形。二是所有行(或列)都是一致的,而列(或行)可以任意分。前者最多两个小矩形需要处理,且行列之和为2n,后者则是一个矩形,最大代价也是2n。
最开始花2n的代价查出每行每列的单调性。
#include<cstdio>
#include<cassert>
#include<algorithm>
using namespace std; int n,k,v,map[][],H=,L=,a;
bool h[],l[];
inline int ask(int x,int y){
if (map[x][y]) return map[x][y];
assert(k--);
printf("1 %d %d\n",x,y);
fflush(stdout);
scanf("%d",&map[x][y]);
return map[x][y];
}
inline bool work(int l,int r,int _l,int _r,int hs,int ls){
int H[]={l,r},L[]={_l,_r};
if (ask(H[ls],L[hs])<v||ask(H[ls^],L[hs^])>v) return ;
for(;H[]<=H[]&&L[]<=L[];){
a=ask(H[ls^],L[hs]);
if (a==v){
printf("2 %d %d\n",H[ls^],L[hs]);
fflush(stdout);
return ;
}else if (a>v) L[hs]+=hs?-:;else H[ls^]+=ls?:-;
}
return ;
}
int main(){
scanf("%d%d%d",&n,&k,&v);
for (int i=;i<=n;i++){
ask(i,i);
ask(i,i==n?:i+);
if (i==n) h[i]=map[i][]<map[i][i];else h[i]=map[i][i]<map[i][i+];
}
l[]=map[][]<map[n][];
for (int i=;i<=n;i++) l[i]=map[i-][i]<map[i][i]; for (int i=,_i;i<=n;i=_i){
for (_i=i+;_i<=n;_i++)
if (h[_i]!=h[i]) break;
for (int j=,_j;j<=n;j=_j){
for (_j=j+;_j<=n;_j++)
if (l[_j]!=l[j]) break;
if (work(i,_i-,j,_j-,h[i],l[j])) return ;
}
}
puts("2 -1 -1");
fflush(stdout);
}
Codechef August Challenge 2018 : Interactive Matrix的更多相关文章
- Codechef August Challenge 2018 : Chef at the River
传送门 (要是没有tjm(Sakits)的帮忙,我还真不知道啥时候能做出来 结论是第一次带走尽可能少的动物,使未带走的动物不冲突,带走的这个数量就是最优解. 首先这个数量肯定是下界,更少的话连第一次都 ...
- Codechef August Challenge 2018 : Safe Partition
传送门 (虽然是A了但是不知道复杂度是不是正确的 考虑以某个位置为结尾的合法划分 先考虑min,带来的影响是限制了最小长度,预处理出这个最小长度后,这可以在处理到这个数时,把不能算的部分去掉(不满足m ...
- Codechef August Challenge 2018 : Lonely Cycles
传送门 几波树形dp就行了. #include<cstdio> #include<cstring> #include<algorithm> #define MN 5 ...
- Codechef August Challenge 2018 : Coordinate Compression
传送门 外边二分,里面拿线段树维护贪心就行了. #include<cstdio> #include<vector> #include<cstring> #inclu ...
- Codechef August Challenge 2018 : Modular GCD
传送门 一开始还手动拓欧找规律,发现好像玩不了. 然后想了想,A-B这个数比较小,枚举它的因子判断合不合法就行了. 需要特判A=B的情况. #include<cstdio> #includ ...
- Codechef October Challenge 2018 游记
Codechef October Challenge 2018 游记 CHSERVE - Chef and Serves 题目大意: 乒乓球比赛中,双方每累计得两分就会交换一次发球权. 不过,大厨和小 ...
- Codechef September Challenge 2018 游记
Codechef September Challenge 2018 游记 Magician versus Chef 题目大意: 有一排\(n(n\le10^5)\)个格子,一开始硬币在第\(x\)个格 ...
- codechef February Challenge 2018 简要题解
比赛链接:https://www.codechef.com/FEB18,题面和提交记录是公开的,这里就不再贴了 Chef And His Characters 模拟题 Chef And The Pat ...
- Codechef STMINCUT S-T Mincut (CodeChef May Challenge 2018) kruskal
原文链接http://www.cnblogs.com/zhouzhendong/p/9010945.html 题目传送门 - Codechef STMINCUT 题意 在一个有边权的无向图中,我们定义 ...
随机推荐
- ORA-28000错误的原因及解决办法
当使用SQL*Plus登录时,Oracle数据库时提示“ORA-28000:帐号被锁定”. 导致出现改错误的原因是:在oracle database 11g中,默认在default概要文件中设置了“F ...
- nginx的信号量
一.官方文档 https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/ 二.nginx进程说明 一般在nginx ...
- 第六节:WebApi的部署方式(自托管)
一. 简单说明 开篇就介绍过WebApi和MVC相比,其中优势之一就是WebApi可以不依赖于IIS部署,可以自托管,当然这里指的是 .Net FrameWork 下的 WebApi 和 MVC 相比 ...
- Spring Security 之基本概念
Spring Security 是一个安全框架, 可以简单地认为 Spring Security 是放在用户和 Spring 应用之间的一个安全屏障, 每一个 web 请求都先要经过 Spring S ...
- Spring Security 之方法级的安全管控
默认情况下, Spring Security 并不启用方法级的安全管控. 启用方法级的管控后, 可以针对不同的方法通过注解设置不同的访问条件. Spring Security 支持三种方法级注解, 分 ...
- [物理学与PDEs]第5章第1节 引言
1. 弹性力学是研究弹性体在荷载的作用下, 其内力 (应力) 和变形所满足的规律的学科. 2. 荷载主要有两种, 一是作用在弹性体上的机械力 (本章讨论); 二是由温度等各种能导致弹性体变形的物理 ...
- UIWebView代码注入时机与姿势
一个奇怪的业务场景,引发的胡乱思考 问题其实不难解决,只是顺着这个问题,发散出了一些有意思的东西 本文旨在讨论UIWebView,WKWebView有自己的机制,不用这么费劲 我们的业务最大的最重要的 ...
- SpringMVC中的数据绑定(也就是参数的接收)
spirngMVC中的数据绑定类型,分为默认数据类型,简单数据类型,pojo类型,包装的pojo类型,绑定数组类型,绑定集合类型,还有自定定义数据绑定. 例如默认数据类型的绑定@RequestMapp ...
- shell 批量获取ip 和主机名
[DNyunwei@YZSJHL24-209 li]$ cat jia.sh #!/bin/bash ip=`cat jia.ip` for i in $ip;do HostName=`ssh -t ...
- ZOC7在Mac下发送命令到多个窗口设置
1 详见截图,找了半天 2 然后,下边框就会出现命令发送多个窗口的输入框了