[atARC070F]HonestOrUnkind】的更多相关文章

考虑当$a\le b$时,构造两种方案,满足诚实的人不交,接下来要求对于任意询问,这两种方案的答案都有可能相同 考虑询问$(i,j)$,若$i$在两种方案中有一种不诚实,那么总可以让答案相同,又因为诚实的人不交,因此一定可行 当$a>b$,我们只需要找到一个诚实的人就可以做了,考虑如何找到这个诚实的人: 对于询问$(i,j)$,若结果为不诚实,至少存在一个人不诚实,考虑同时删去$i$和$j$,显然最终不可能只剩下不诚实的人 维护一个栈(初始为空),从1到$n$遍历所有人,并询问$(栈顶,i)$,…
传送门 显然\(a>b\)的情况下才有解 考虑先找出一个诚实的人,然后剩下的都可以在\(n\)次以内问出来了 发现如果一个人说另一个人是说谎的那么这两个人必有一个是说谎的,由于诚实的人严格多于不诚实的人,我们就可以把他们都丢掉 我们可以考虑维护一个栈,这样找出来的栈顶一定是诚实的人,总次数也在\(2n\)以内 代码: #include<cstdio> #include<iostream> #include<algorithm> #include<cstrin…
不妨先从无解的情况下手,不难发现当 \(A \le B\) 时是一定无解的. 因为不诚实的 \(B\) 个人可以装作是诚实的,全部说自己这一方是诚实的对方是不诚实的我们就无法判断了. 下面我们就可以在 \(A > B\) 的情况下来处理这个交互问题了. 一个最基本最靠谱的方法是先找到一个诚实的人,然后用他把所有人全部问一遍. 因此下面我们的目的就是在 \(n\) 次询问以内找到一个诚实的人. 首先需要一个基于操作的观察: 若回答为 \(F\) 则两者之中必然存在一个人不诚实. 那么我们可以考虑使…
ARC 067 F - Yakiniku Restaurants 题意 \(n\) 家饭店,\(m\) 张餐票,第 \(i\) 家和第 \(i+1\) 家饭店之间的距离是 \(A_i\) ,在第 \(i\) 家饭店用掉第 \(j\) 张餐票会获得 \(B_{i, j}\) 的好感度,可以从任意一个饭店出发,求好感度减经过的距离和的差的最大值. \(2 \le n \le 5000, 1 \le m \le 200, 1 \le A_{i, j}, B_{i, j} \le 10^9\) 题解 做…
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和\(A_{i+1}\)之间只会有一个括号:有多个括号的话只保留最外边那个,答案不变. 然后就可以定义状态:\(dp_{i,j}\)表示前\(i\)个数,还有\(j\)个未闭合的左括号,得到的最大答案. 由于只有减号右边有括号,所以只要知道左边有几个未闭合的左括号,就可以知道自己的贡献是\(1\)还是…
ARC070 C - Go Home 题目大意:一只袋鼠第i秒可以向左或向右跳i步或者不跳,问从0跳到x的最小时间 就是1,2,3,4...k总和超过x的最小的k,因为如果超过了x的那部分需要减掉的那步我不跳即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define…