【CF1020D】The hat(交互,二分)】的更多相关文章

cf1020D 题意: 交互题目,在有限的询问中找到一个x,使得数列中的第x位和第(x+n/2)位的值大小相同.数列保证相邻的两个差值为1或-1: 思路: 构造函数f(x) = a[x] - a[x + n/2] ,由于a数列差值为1或-1,所以可以发现f(x)是连续的.然后就可以用二分了,这种二分的check方式是自己第一次见的.就是通过f(mid)和f(d)的正负来判断区间的移动.其中d是任选的. 代码: #include <iostream> #include <cstdio>…
题目链接 \(Description\) 有一棵\(n\)个点的树.你需要在\(11111\)次询问内确定出这棵树的形态.每次询问你给定两个非空且不相交的点集\(S,T\)和一个点\(u\),交互库会告诉你满足\(x\in S,y\in T\),且\(x\to y\)经过了\(u\)的点对\((x,y)\)的数量. \(n\leq500\). \(Solution\) 不妨假设以\(1\)为根.首先如果想知道\(y\)是否在\(x\)的子树内,询问\(S=\{1\},T=\{y\},u=x\)就…
题目链接 \(Description\) 有一个长为\(n\)的二进制串,保证\(01\)都存在.你可以询问不超过\(15\)次,每次询问你给出一个长为\(n\)的二进制串,交互库会返回你的串和目标串的不同位的数目.求任意一个\(0\)和\(1\)的位置. \(n\leq 1000\). \(Solution\) 通过\(0...\)和\(1...\)就可以判断出第一个数是什么.然后二分,对每个区间判断是否全为\(0/1\),就可以找到另一个了. 为啥有时候用read()会T.. #includ…
题目链接 \(Description\) 有一个大小为\(k\)的集合\(S\),元素两两不同且在\([1,n]\)内.你可以询问不超过\(60\)次,每次询问你给出\(x,y\),交互库会返回\(\left[\ \min(|x-a|,a\in S)\leq \min(|y-a|,a\in S)\ \right]\)是(TAK)否(NIE)为真.求任意两个一定在集合\(S\)中出现过的数. \(Solution\) 考虑对区间\([l,r]\)二分,若Check(mid,mid+1)==1,则区…
为什么Cf上所有的交互题都是$binary \; Search$... 把序列分成前后两个相等的部分,每一个都可以看成一条斜率为正负$1$的折线.我们把他们放在一起,显然,当折线的交点的横坐标为整数时有解. 我们考虑序列元素$a_{i}, a_{i + \frac{n}{2}}$,他们的差的奇偶性对于每一个$i$都是一样的,因为随着横坐标的增加,纵坐标之差要么不变,要么加减$2$. 显然如果我们询问$a_{1}, a_{1 + \frac{n}{2}}$的差是奇数,那就不可能存在解了. 我们把折…
D. Game with modulo time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output This is an interactive problem. Vasya and Petya are going to play the following game: Petya has some positive integer num…
This is an interactive problem. In the output section below you will see the information about flushing the output. On Sunday Leha the hacker took Nura from the house where she lives and went with her to one of the most luxurious restaurants in Vičko…
题目链接 官方题解写得很详细,我竟然看懂了. Subtask1: 暴力的话,猜可以\(2^n\)枚举点集\(A,B\),将除了\(A,B\)之间的边全部删掉,然后询问.一定有至少一组\(A,B\)返回连通. 设二分图两边的点集分别是\(S,T\),能猜到此时\(S=A,T=B\).假设\(S\cap A\neq\emptyset\)且\(T\cap A\neq\emptyset\),那\(A,B\)连通说明\(S,T\)通过同一个点连通,显然不会,因此\(T\cap A=\emptyset\).…
题目链接 \(Description\) 在一个\(n*n\)的二维平面中有两个不相交的整点矩形,每次可以询问两个矩形有几个完全在你给出的一个矩形中.200次询问内确定两个矩形坐标. \(Solution\) 容易想到二分.整个矩形好像不好判断?那就每次二分判断矩形两个点的横纵坐标.次数为 8*26<200. 前四次二分可以确定出一个矩形的位置.然后第二个矩形就可以根据第一个求了. #include <cstdio> #include <cctype> #define gc(…
题面 题解 如果位置为i的人与对面的差是x,i+1位置由于只能+1或-1,所以i+1位置与对面的差就是x.x+2或x-2,可以发现,奇偶性不变. 所以只要判断出是奇差,就可以直接输出"! -1",如果是偶差,就一定有解. 下面是个圆环,从1~n/2+1开始,顺时针转,记L=1,R=n/2+1. 把两个点转半圈的函数记录下来:(谁是L谁是R已经不重要了) 会发现两者一定有一个交点,而且由于差是偶数,中间的交点一定是整点! 下面看怎么求随便一个交点: 如果我们发现一对中间点,那么有两种情况…
目录 Codeforces 1114 A.Got Any Grapes? B.Yet Another Array Partitioning Task C.Trailing Loves (or L'oeufs?) D.Flood Fill(区间DP) E.Arithmetic Progression(交互 二分 随机化) F.Please, another Queries on Array?(线段树 欧拉函数) Codeforces 1114 比赛链接 貌似最近平均难度最低的一场div2了...…
目录 Codeforces 1064 A.Make a triangle! B.Equations of Mathematical Magic C.Oh Those Palindromes D.Labyrinth(BFS) E.Dwarves,Hats and Extrasensory Abilities(交互 二分) F.Candies for Children D.Labyrinth E.Dwarves,Hats and Extrasensory Abilities Codeforces 1…
题意:有n个人围成一个圈,n为偶数,每个人有一个数字a[i],保证相邻两个人的数字差为1 最多可以询问60次,要求获得一个i使得a[i]=a[i+n/2] n<=1e5,abs(a[i])<=1e9 思路:首先n不为4的倍数时奇偶性不同,无解 将+1和-1设为b[i],所求即为两段长度为n并且和为0的数列 设f(i)=a[i+n/2]-a[i] 二分答案,设当前区间为[l,r],中点为mid 若f(l)与f(mid)异号,答案若存在则(l,mid)中必定有解 若f(r)与f(mid)异号,答案…
交互题就是程序与电脑代码的交互. 比如没有主函数的程序,而spj则给你一段主函,就变成了一个整体函数. 还有一种就是程序和spj之间有互动,这个用到fflush(stdout);这个函数就可以实现交互了 fflush(stdin) 作用:清理标准输入流,把多余的未被保存的数据丢掉 fflush(stdout) 作用:清空输出缓冲区,并把缓冲区内容输出 CF1103B Game with modulo 题意:有一个需要你猜的数a,你每次可以猜两个数,如果x%a>=y%a,则返回x,否则返回y.你最…
恶臭的交互题 /* 一个结论:一个矩形将空间分割成两部分,如果开头结尾都在一个部分内,那么穿过矩形边框的线条数就是偶数,反之就是奇数 通过这个结论来进行判断 先询问999次将两个x坐标确定,方法是询问(1,X)(n,X)如果结果是奇数,那么就有个点在这里,反之没有,或者是两个点都在X上 同理询问出两个y坐标 如果结果是两个x,两个y,那么需要确定是(x1,y1)(x2,y2)还是(x1,y2)(x2,y1),这个只要单点询问一次即可 如果结果是一个x,或者一个y(不可能出现两个x都相等,或者y都…
<题目链接> 题目大意: 有一个长度为n(n<1000)的01串,该串中至少有一个0和一个1,现在由你构造出一些01串,进行询问,然后系统会给出你构造的串与原串的   Hamming distance ,现在要求你按照步骤进行交互式操作,最终得到任意一个0.1的下标. 解题分析:因为原串中至少存在一个0和一个1,所以一定存在一个01或者10序列,因此我们可以用二分来寻找这个序列(注意二分过程中选择区间的操作).二分之后,一定能够得到01或10序列,然后将其按先0后1的顺序输出即可. #i…
既然是在CF上AC的第一道交互题,而且正是这场比赛让我升紫了,所以十分值得纪念. 题目链接:CF原网 题目大意:交互题. 有一个长度为 $n$ 的序列 $a$,保证它从小到大排序后是个等差数列.你不知道这个序列长什么样,但你可以询问: $?\ i$ 表示询问 $a_i$ 的值: $>\ x$ 表示询问序列中是否存在严格大于 $x$ 的数. 你可以问不超过 $60$ 个询问. 现在,你需要求出这个等差数列的首项(也就是 $a$ 中的最小值)和这个等差数列的公差(也就是等差数列中相邻两个数的差).…
题目链接 \(Description\) 有一个长为\(n\)的序列,其中有两个元素为\(y\),其余全为\(x\).你可以进行\(19\)次询问,每次询问你给出一个下标集合,交互库会返回这些元素的异或和.给定\(n,x,y\),你需要求出两个\(y\)的下标. \(n\leq 1000,1\leq x,y\leq 10^9\). \(Solution\) 对连续区间询问得到的结果只有那么几种,可以直接判断\(y\)的个数的奇偶性.但是区分不出来该区间有0个还是2个\(y\). 两个\(y\)的…
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…
题目来源:codeforces1039B Subway Pursuit 题目大意: 在1到n里有一个运动的点,要求找到这个点,每次可以查询一个区间内有没有这个点,每次这个点往左或者往右移动1到k个位置,要求要在4500次查询内找到这个点的位置 输入格式: 一行两个整数n,k 输出格式: 每行输出两个整数l,r表示查询区间 表示蒟蒻一直不知道交互题怎么做......而且看到原题的超长英文内心也是懵逼的......真的是什么都不会...... 最后终于会做了!(假的,其实是抄了题解啊)所以就特来写一…
Find an element in hidden array There is an array of length N consisting of non-negative integers. The array is sorted in non-decreasing order. Each number in the array appears exactly K times, except one element, which appears at least once, but les…
第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常水,却十分有趣. Code: #include<cstring> #include<algorithm> #include<cstdio> #include<iostream> using namespace std; const int maxn = 100;…
点此看题面 大致题意: 有一个\(1\sim 2^n\)的排列,\(n\le7\),每次交互告诉你有几个位置上的数是正确的,让你在\(1000\)轮以内猜出每个位置上的数. 二分 显然,我们可以通过二分来求解此题. 具体地,我们先把所有位置填满\(1\),然后暴力枚,找到一个位置填上\(2\)使得此时没有一个位置上的数是正确的. 然后接下来,我们枚举\(3\sim2^n\)的每一个数,每次把\(l\sim mid\)这段区间内除不是\(1\)或\(2\)的位置外全填上当前数,然后询问当前对的数的…
LINK:I 君的探险 神仙题! 考虑一个暴力的做法 每次点亮一个点 询问全部点 这样询问次数为 \(\frac{n\cdot (n-1)}{2}\) 可以通过前5个点. 考虑都为A的部分分 发现一个点只会和另外一个点进行连边. 且询问次数要求\(nlogn\) 需要分治 二分等方法. 一个想法是 每次点亮一个再询问全部太浪费了 可以进行分治. 即每次点亮\(\frac{1}{4}\)数量的点 然后观察 如果两个点是一组的那么他们的状态相同 按照状态来划分区域再进行分治下去. 每次可以rand选…
(题面来自AcWing) 有N个元素,编号1.2..N,每一对元素之间的大小关系是确定的,关系不具有传递性. 也就是说,元素的大小关系是N个点与N*(N-1)/2条有向边构成的任意有向图. 然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过10000次提问来获取信息,每次提问只能了解某两个元素之间的关系. 现在请你把这N个元素排成一行,使得每个元素都小于右边与它相邻的元素. 你可以通过我们预设的bool函数compare来获得两个元素之间的大小关系. 例如,编号为a和b的两个元素…
正题 题目链接:https://www.luogu.com.cn/problem/CF1370F2 题目大意 \(T\)组数据,给出\(n\)个点的一棵树,有两个隐藏的关键点.你每次可以询问一个点集,交互库会回答这个点集中的一个点满足它到两个关键点的距离和最小,和这个距离. 要求在\(11\)次询问内求出这两个关键点. \(1\leq T\leq 10,1\leq n\leq 1000\) 解题思路 首先第一下不知道干啥就问整张图吧. 这样我们就得到了一个点\(rt\)和距离\(L\).这个点\…
题目链接:http://codeforces.com/contest/1104/problem/D 题目大意:给出一个式子 x%a y%a,会返回结果,如果返回x代表x%a>=y%a.如果返回y代表x%a<y%a.然后让你判断a的值. 具体思路:首先确定范围(0,1),(1,2),(2,4),(4,8)这样确定范围,就可以把大体的范围确定好了.确定好了之后还是运用二分的思路逐步逼近最佳结果,判断结束二分的条件是mid+1==r.举个例子, 15 16 ,如果返回的是x,那么这个时候a就是16了…
题意 题目链接 \(n\)次操作,每次你给出一个点的坐标,系统会返回该点的颜色(黑 / 白),程序最后输出一条直线把所有黑点和白点分隔开 Sol 一个很直观的想法:首先询问\((dx, 0)\),然后每次询问二分中点,根据与第一次询问得到的字符串的关系不断调整二分范围 但是这样会被卡,我修改了两个地方才过. 二分调整边界的时候直接设\(l = mid\)或\(r = mid\),因为我们最后得到的不是一个精确解,所以这样写是可以的 最后输出直线的时候加一个偏移量,也就是输出一条斜线 具体看代码…
https://codeforces.com/contest/1146/problem/C 题意 一颗大小为n的树,每次可以询问两个集合,返回两个集合中的点的最大距离,9次询问之内得出树的直径 题解 求树的直径:先找到一个点a,找到离他最远的一个点b,最后找到距离b最远的点c,b和c之间的距离就是树的直径 先询问离1最远的距离,然后二分找到这个点a,然后询问a的最远距离 代码 #include<bits/stdc++.h> #define fk fflush(stdout) using nam…
https://codeforces.com/contest/1153/problem/E 题意 边长为n的正方形里面有一条蛇,每次可以询问一个矩形,然后会告诉你蛇身和矩形相交有几部分,你需要在最多2019询问中知道蛇的头和尾 题解 假如相交奇数部分,那么头和尾一定有一个在矩形里面,假如为偶数部分,头和尾都在里面或者都不在 利用上述性质,对每一行进行询问即(1,1)(i,n) (999次) 假如存在头尾不在同一行,则对列进行两次二分就可以分别找到头和尾(2*10次) 假如头尾在同一行,那么就要从…