UOJ#206. 【APIO2016】Gap 构造 交互题】的更多相关文章

原文链接www.cnblogs.com/zhouzhendong/p/UOJ206.html 题解 T = 1 的情况直接大力从两边向中间询问即可. T = 2 的情况挺妙的,我没想到. 考虑首先花费 n + 1 代价得到全局最大值和最小值,也就是 a[1] 和 a[n] . 然后考虑将值域均分为 n - 1 段,每一段询问一下.答案一定在 相邻两段区间的 左边一段的Max 和右边一段的Min 之间 ,或者 a[1] 与 a[1] 右侧数,或者 a[n] 与 a[n] 左侧数 中产生. 我们考虑…
参考:https://blog.csdn.net/clover_hxy/article/details/70767653 人生第一次交互题...不是很难但是思维和传统题差别挺大的(以及并不会本地测试= =),详见参考blog和代码吧 #include"gap.h" #include<iostream> #include<cstdio> using namespace std; const long long inf=1e18; long long findGap…
第一个subtask应该还是很送分的,就是每次询问两端值的大小,(N+1)/2次即可. 考虑第二个subtask,首先还是先把最小值和最大值询问出来,然后发现不需要询问每一个数,直接将[l+1,r-1]均分成N-1个区间,因为最长区间长度一定不小于平均值,所以应该会跨越两段,若在某一段内有值即可直接统计答案,发现除了头尾其余的点各询问到3次. #include "gap.h" #include<algorithm> using namespace std; typedef…
题目传送门 /* 构造水题:对于0的多个位数的NO,对于位数太大的在后面补0,在9×k的范围内的平均的原则 */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; ; const int INF = 0x3f3f3f3f; int a[MAXN]; int main(void) //Codeforces Round #…
题目:UOJ#206. 题目大意:由于过于冗长,不好解释,所以详见原题. 解题思路:这是一道交互题. 对于第一问,很容易解决.由于数列严格递增,所以不会出现相等的情况. 首先调用MinMax(0,10^18,&l,&r)求出最小值和最大值,然后每次调用MinMax(l+1,r-1,&l,&r)求出次大值.次小值,第三大值.第三小值…… 如此调用$\lfloor \frac{N+1}{2}\rfloor$次,就可以求出整个数组.然后求值即可. 对于第二问,首先仍然是求出最小值…
交互题就是程序与电脑代码的交互. 比如没有主函数的程序,而spj则给你一段主函,就变成了一个整体函数. 还有一种就是程序和spj之间有互动,这个用到fflush(stdout);这个函数就可以实现交互了 fflush(stdin) 作用:清理标准输入流,把多余的未被保存的数据丢掉 fflush(stdout) 作用:清空输出缓冲区,并把缓冲区内容输出 CF1103B Game with modulo 题意:有一个需要你猜的数a,你每次可以猜两个数,如果x%a>=y%a,则返回x,否则返回y.你最…
既然是在CF上AC的第一道交互题,而且正是这场比赛让我升紫了,所以十分值得纪念. 题目链接:CF原网 题目大意:交互题. 有一个长度为 $n$ 的序列 $a$,保证它从小到大排序后是个等差数列.你不知道这个序列长什么样,但你可以询问: $?\ i$ 表示询问 $a_i$ 的值: $>\ x$ 表示询问序列中是否存在严格大于 $x$ 的数. 你可以问不超过 $60$ 个询问. 现在,你需要求出这个等差数列的首项(也就是 $a$ 中的最小值)和这个等差数列的公差(也就是等差数列中相邻两个数的差).…
题目链接:https://codeforces.com/contest/1137/problem/D 题意: 交互题. 给定如下一个有向图: 现在十个人各有一枚棋子(编号 $0 \sim 9$),在不知道 $t,c$ 的值的情况下,他们同时从home出发,要最终到达flag处. 你只能选择移动哪几个人的棋子,但棋子移动到哪里由程序确定并给出. 题解: 看网上大佬一个神仙解法……看得我一愣一愣的…… 选定两颗棋子,第一颗每次都移动,第二颗隔一次移动一次.所以,进行了 $2t$ 次之后第二颗棋子刚好…
交互题介绍:https://loj.ac/problem/6 题意:输出Q X ,读入><= 来猜数,小于50步猜出就算过样例 题解:根本不需要每次输出要打cout.flush()... ac: #include<iostream> #include<string> using namespace std; int main() { , r = 1e9; while (l <= r) { ; cout << 'Q' << ' ' <&…
https://codeforces.com/contest/1061/problem/F 题意 假设存在一颗完全k叉树(n<=1e5),允许你进行最多(n*60)次询问,然后输出这棵树的根,每次询问,a,b,c三个点,会返回b是否在a,c之间的路径上 思路 粗略看了下询问次数,可以知道,你最多可以询问60对不同的点,每对点遍历n个点,可以知道n个点在不在这两个点的中间 一开始的思路是,随机找两个点,遍历所有点,然后记录在他们中间的点,在里面再找两个点,继续上述操作,知道剩下一个点,但是假设某一…
D. Searching Rectangles 题目连接: http://codeforces.com/contest/714/problem/D Description Filya just learned new geometry object - rectangle. He is given a field consisting of n × n unit cells. Rows are numbered from bottom to top with integer from 1 to…
Problem K. KMC Attacks 题目连接: http://codeforces.com/gym/100714 Description Warrant VI is a remote planet located in the Koprulu Sector. Warrant VI features a strange huge field, which was discovered by the Kel-Morian Combine (KMC). The KMC is involved…
题目 CF1153E Serval and Snake 很有意思的一道交互题 做法 我们观察到,每次查询一行,当这一行仅包含一端是返回的答案是奇数 根据这个性质查询每一行每一列,我们大体能知道两端的位置 查询矩阵时也是这个道理(奇数),可以二分行和列从而得出答案 Code #include<bits/stdc++.h> typedef int LL; LL n; LL fir_1,fir_2,sec_1,sec_2; inline LL Check(LL x,LL y,LL _x,LL _y)…
题目来源:codeforces1039B Subway Pursuit 题目大意: 在1到n里有一个运动的点,要求找到这个点,每次可以查询一个区间内有没有这个点,每次这个点往左或者往右移动1到k个位置,要求要在4500次查询内找到这个点的位置 输入格式: 一行两个整数n,k 输出格式: 每行输出两个整数l,r表示查询区间 表示蒟蒻一直不知道交互题怎么做......而且看到原题的超长英文内心也是懵逼的......真的是什么都不会...... 最后终于会做了!(假的,其实是抄了题解啊)所以就特来写一…
这里的交互题指的NOI风格的交互题,即交互库 codeforces风格的交互题...只能自己实现评测插件了 使用Cena,Lemon没有附加文件功能不能评测交互题 在编译选项g++编译命令源文件中加入grader.cpp 在数据包中放xxxx.h和grader.cpp 在题目配置中附加文件里加入grader.cpp和xxxx.h 如果测交互题同时要测传统题,由于cena不能每个题单独配置编译命令,所以可以每个题都加入grader.cpp,但是传统题的grader.cpp是空文件 (其实Lemon…
第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常水,却十分有趣. Code: #include<cstring> #include<algorithm> #include<cstdio> #include<iostream> using namespace std; const int maxn = 100;…
传送门 一道考验思维的交互题 大致思路就是从最高的二进制位向下询问 代入例子比如: 5 6 6 5 7 4 6 4 讨论一下 交互题的重点学会推理和归纳 #include <bits/stdc++.h> using namespace std; int n, a, b; inline int ask(int c, int d) { printf("? %d %d\n", c, d); fflush(stdout); int rt; scanf("%d",…
传送门 第一道交互题 题意: 电脑事先想好了一个数[,] 你会每次问电脑一个数是否是它想的那个数的因数 电脑会告诉你yes或no 至多询问20次 最后要输出它想的数是质数还是合数 思路: 枚举<50的质数和4,,,49即可判断 ,, ,49单独看作质数是这样方便判断2^,^,...,^ 解释: 在使用多个输出函数连续进行多次输出时,有可能发现输出错误. 因为下一个数据再上一个数据还没输出完毕,还在输出缓冲区中时,下一个printf就把另一个数据加入输出缓冲区, 结果冲掉了原来的数据,出现输出错误…
1023E 题意: 交互题.在一个有障碍地图中,问如何走才能从(1,1)走到(n,n),只能向右或者向左走.每次询问两个点,回复你这两个点能不能走通. 思路: 只用最多2*n-2次询问.从(1,1),能向右走就向右走,不能就向下走,直到走到斜对角线上.从(n,n)出发,能向上走就向上走,不能就向左走,直到走到斜对角线上. 因为保证有路,所以最后输出(1,1)出发的正向路径,加上从(n,n)出发的反向路径. #include <algorithm> #include <iterator&g…
题目 题意: 0≤a,b<2^30, 最多猜62次. 交互题,题目设定好a,b的值,要你去猜.要你通过输入 c d : 如果 a^c < b^d ,会反馈 -1 : 如果 a^c = b^d ,会反馈  0 : 如果 a^c > b^d ,会反馈  1 : 每次猜前面都用 ? 表示, 最后一行用!表示已经知道a b的值. 思路: 不会,然后去找别人博客学.  大致思路就是:a b都是二进制来表示,从高到低位 把a和b的每一位都判断出来. 判断a b同一位是否相等: 1. 如果相等,判断这…
人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. 令cntr表示答案为奇数的行数,cntc表示答案为奇数的列数. 那么cntr只能为0或者2,0就表示两个头在同一行,2就表示两个头在不同的行(我们已经找出这两行了) cntc亦然. 然后cntr与cntc不可能同时为0,因为两个端点不可能既在同一行又在同一列. 所以对于cntr=cntc=2的,我…
D. Game with modulo 交互题(取余(膜)性质) 题意 猜一个点\(a\)可以向机器提问 点对\((x,y)\) 如果\(x\mod(a)>=y\mod(a)\)回答\(x\) 反之回答\(y\) 询问不能超过60下,请你猜出a 思路 \(a\mod(b)<a/2(a>=b)\) 形式化的证明: a的二进制形式是1xxxxxx b的二进制形式是0001xxx \(a=b*k+x\) 设a和b最高位二进制的位数差为\(z\) \(k=1<<(z-1)\) 这时…
B. Lost Number[CF交互题 暴力] This is an interactive problem. Remember to flush your output while communicating with the testing program. You may use fflush(stdout) in C++, system.out.flush() in Java, stdout.flush() in Python or flush(output) in Pascal to…
E. XOR Guessing 交互题. 因为这个数最多只有14位 0~13,所以我们可以先处理后面7位,然后再处理后面7位. 因为异或的性质,如果一个数和0异或,那么就等于本身. 所以我们第一次异或1~100 所以 后面从7到13位就都是0,所以结果的后面的7位就可以算出来. 然后同理可以把前面七位找到. #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm>…
E. The penguin's game time limit per test: 1 second memory limit per test: 256 megabytes input: standard input output: standard output Pay attention: this problem is interactive. Penguin Xoriy came up with a new game recently. He has n icicles number…
如何在本地配置\(lemonlime\)和使用\(lemonlime\)测试交互题 \(lemonlime\)下载地址链接,提取码ae3z 点开\(lemonlime.exe\)然后编译器选择\(gcc,g++\) 然后寻找\(DEV-CPP\)所在文件夹,按照大概这样寻找编译器路径(如果真找不着,不妨在右上角搜索\(gcc/g++.exe\)) \(gcc\)路径 C:\Dev-Cpp\TDM-GCC-64\bin\gcc.exe \(g++\)路径 C:\Dev-Cpp\TDM-GCC-64…
记录一下第一次写交互题 题目大意:一共有1<<n个人参加一场竞标赛,需要你通过比较两人的胜场来判断谁晋级,最终获得第一名 最多1/3*2^(n+1)次询问,每次询问query(a,b),如果a胜场多返回1,如果b胜场多返回2,相同胜场返回0 找到冠军后输出"! i"(i为冠军的编号) 思路: 每次取四个人一组,因为如果这一组人进行了t轮比赛后,最终有一人胜出,那么他们的胜场将为 [ t , t , t+1 , t+2 ],而且 t 和 t 不能出现在同一组,那么他们的胜场排…
描述 提交 自定义测试 有 NN 个严格递增的非负整数 a1,a2,…,aNa1,a2,…,aN(0≤a1<a2<⋯<aN≤10180≤a1<a2<⋯<aN≤1018).你需要找出 ai+1−aiai+1−ai(0≤i≤N−10≤i≤N−1)里的最大的值. 你的程序不能直接读入这个整数序列,但是你可以通过给定的函数来查询该序列的信息.关于查询函数的细节,请根据你所使用的语言,参考下面的实现细节部分. 你需要实现一个函数,该函数返回 ai+1−aiai+1−ai(0≤i≤…
Description Solution 第一个子任务,直接从 \((a[i],a[j])\) 推出 \((a[i+1],a[j-1])\) 就行了,只需要 \(\frac{N+1}{2}\) 第二个子任务,首先答案至少是 \(\lceil\frac{max-min}{N-1}\rceil\) 然后我们就只关心长度大于 \(ans\) 的区间了,每一次扩展下去,就可以遍历到所有相邻点,更新一下答案 每一个点刚好贡献两次,加上刚开始找 \(max\) 和 \(min\) 的次数刚好是 \(3*N\…
http://uoj.ac/problem/206 对于T=1,直接从两端往中间跳可以遍历所有的点. 对于T=2,先求出最小值a和最大值b,由鸽巢原理,答案一定不小于\(\frac{b-a}{N-1}\). 这样设\(L=\frac{b-a}{N-1}\)上取整,对\([a,b]\)分块,块大小为\(L-1\),在块之间查询答案,因为块内的答案都\(\leq L-1\). 能在3N次内求出. 好神啊. #include "gap.h" #include<cstdio> #i…