jjzjj

Codeforces

全部标签

Codeforces 1666 I. Interactive Treasure Hunt

题意这是一个交互题有n×m的矩阵,里面有两个宝藏,你可以进行两种操作:第一个是SCAN(x,y),返回两个宝藏到点(x,y)的曼哈顿距离(|x-x|+|y-y|)第二个是DIG(x,y),如果有坐标有宝藏,返回1,否则返回0,当返回两个1时,成功找到两个宝藏你最多可以操作7次吐槽这个题是一次多的机会也不给,七次都是要跑满的,但是感觉这个题也是挺套路的,绝对值一般都是找两个锻炼就可以去掉了,然后分析就很简单了。提示1.首先需要询问四个端点中的相邻两个,然后就可以推出另外两个端点的值2.当行,或者列固定时,沿着一个方向移动,曼哈顿距离的变化趋势一定如下:3.因此我们只需要询问上图平面的中点即可,解

Codeforces 1670 E. Hemose on the Tree

题意给你个数p,n=2^p;有一棵树有n个节点,告诉你怎么连边;每个点有个权值,每条边也有个权值,权值需要自行分配,[1,2,3..n...2n-1],总共2n-1个权值;你需要选一个节点,使得他到所有其他边或者节点的简单路径的异或最大值最小。思路显然,给你个p,不直接给你n一定是有潜藏的东西的,分析一下,n=2^p,那么n的结构一定是1000000,1后面都是0,那可以推测出最终的答案一定是小于等于n的1.初始节点可以随便选的,但是它的值一定设为n2.处于一个点的连接点与边来说,他们的关系一定是x,x+n,这样他们的异或值一定是n,可以保证答案在0-n之间改变,注意x与x+n的位置设置3.如

【CodeForces】Educational Codeforces Round 132 (Rated for Div. 2)

比赛链接链接A.ThreeDoors题目链接链接题目描述输入输出样例输入43012103223102130输出YESNOYESNO题目大意面前有三个门,编号分别为1,2,3。再给你一把编号为x的钥匙,打开每扇门后,可以有一把编号为a[i]的钥匙,判断所给的x是否能把三扇门都打开。思路按照题意进行模拟,并且用a[]存放钥匙编号,st[]用来判断门是否打开代码#include#include#include#include#includeusingnamespacestd;voidsolve(){ intx; cin>>x; inta[4]; cin>>a[1]>>a[2]>>a[3]; bo

【CodeForces】Educational Codeforces Round 132 (Rated for Div. 2)

比赛链接链接A.ThreeDoors题目链接链接题目描述输入输出样例输入43012103223102130输出YESNOYESNO题目大意面前有三个门,编号分别为1,2,3。再给你一把编号为x的钥匙,打开每扇门后,可以有一把编号为a[i]的钥匙,判断所给的x是否能把三扇门都打开。思路按照题意进行模拟,并且用a[]存放钥匙编号,st[]用来判断门是否打开代码#include#include#include#include#includeusingnamespacestd;voidsolve(){ intx; cin>>x; inta[4]; cin>>a[1]>>a[2]>>a[3]; bo

Codeforces 1646 D. Weight the Tree

题意给你n个节点的树,让你给每个节点进行赋值,并且赋的值需要为正整数;同时当一个节点的值等于所有邻居节点的值的和时,这个点为好点;求出一组赋值情况,满足树的好点个数最大化的同时,所有节点赋值的总和最小;思路1.显然无法存在两个好点相邻存在的情况(除非只有两个节点);2.对于坏点直接赋值为1即可;3.可以树形dp解决,f[x][0/1][0/1],第一维代表以x为根,第二维代表是否为好点,第三维代表是好点的个数/子树节点值的总和代码#includeusingnamespacestd;vectorg[200005];intf[200005][2][2];longlongans[200005];in

Codeforces 1646 D. Weight the Tree

题意给你n个节点的树,让你给每个节点进行赋值,并且赋的值需要为正整数;同时当一个节点的值等于所有邻居节点的值的和时,这个点为好点;求出一组赋值情况,满足树的好点个数最大化的同时,所有节点赋值的总和最小;思路1.显然无法存在两个好点相邻存在的情况(除非只有两个节点);2.对于坏点直接赋值为1即可;3.可以树形dp解决,f[x][0/1][0/1],第一维代表以x为根,第二维代表是否为好点,第三维代表是好点的个数/子树节点值的总和代码#includeusingnamespacestd;vectorg[200005];intf[200005][2][2];longlongans[200005];in

【CodeForces -527C】Glass Carving(无旋treap-平衡树)

题目传送门:https://codeforces.com/problemset/problem/527/C题意:给出一个面积为h×w的长方形,有m次操作,每次操作可以横着或竖着在某个位置砍一刀,问你在m次操作后,在所有块中面积最大的一个。思路:理解题意,就是让你求砍m次后,剩下的部分的最长的高和最长的宽,相乘就是最大面积,所以我们可以利用平衡树中的前驱和后继来求所切割点所在部分的长度,同时利用两颗平衡树来维护高和宽,再利用multiset来维护切割后的高度和宽度,每次切割时,要先在multiset中找到所要切割线段的长度,将其切割后再放回去,最后从multiset中找到最长的高和宽相乘即是所求

【CodeForces -527C】Glass Carving(无旋treap-平衡树)

题目传送门:https://codeforces.com/problemset/problem/527/C题意:给出一个面积为h×w的长方形,有m次操作,每次操作可以横着或竖着在某个位置砍一刀,问你在m次操作后,在所有块中面积最大的一个。思路:理解题意,就是让你求砍m次后,剩下的部分的最长的高和最长的宽,相乘就是最大面积,所以我们可以利用平衡树中的前驱和后继来求所切割点所在部分的长度,同时利用两颗平衡树来维护高和宽,再利用multiset来维护切割后的高度和宽度,每次切割时,要先在multiset中找到所要切割线段的长度,将其切割后再放回去,最后从multiset中找到最长的高和宽相乘即是所求

Codeforces Round #838 (Div. 2) D. GCD Queries

题意有个长度为n的排列p,[0,1,2,...n-1],你可以进行至多2*n次询问,每次询问两个i,j,返回gcd(pi,pj),让你在规定时间内猜出0在哪两个位置之一思路这是一道交互题,询问的上限是2n次通过三个数,可以去除掉一个不是0的数对三个数进行以下询问,gcd(a,i),gcd(b,i)如果gcd(a,i)!=gcd(b,i),那么其中a,b小的被i取代,因为a,b中假如有0,那么一定是大的数,那么小的数一定不是0如果gcd(a,i)==gcd(b,i),那么跳过i,因为假如i是0,因为数列每个数都不同,所必不可能相等那么for一遍数组,每次和当前位置i进行两次询问,最多2n的限制内

Codeforces Round #838 (Div. 2) D. GCD Queries

题意有个长度为n的排列p,[0,1,2,...n-1],你可以进行至多2*n次询问,每次询问两个i,j,返回gcd(pi,pj),让你在规定时间内猜出0在哪两个位置之一思路这是一道交互题,询问的上限是2n次通过三个数,可以去除掉一个不是0的数对三个数进行以下询问,gcd(a,i),gcd(b,i)如果gcd(a,i)!=gcd(b,i),那么其中a,b小的被i取代,因为a,b中假如有0,那么一定是大的数,那么小的数一定不是0如果gcd(a,i)==gcd(b,i),那么跳过i,因为假如i是0,因为数列每个数都不同,所必不可能相等那么for一遍数组,每次和当前位置i进行两次询问,最多2n的限制内