[构造][树][贪心] codeforces 1041E Tree Reconstruction

http://codeforces.com/contest/1041/problem/E

比赛完5min想到了ac做法emmmm

并没有看懂官方题解,NO的判别其实很简单,只要有b不是n的情况就NO,因为不管怎么分都一定会有一个n。YES的情况怎么构造?我自己的做法是把n作为根节点,把条件排序后从小到大考虑:如果一个点出现了一次,那么就连一条从根节点到这个点的边,并且把这个点标记为用过的;如果出现了多次,那么就到前面找没有标记过的点找一个最小的插到当前点和他的父节点之间,并且把找到的点也标记为用过的。

所以为什么是正确的?首先按照a排序后可以发现如果一个数字重复出现了那么一定是从第ai个往前重复,如1 3 3 4,这个重复的3一定是从第3个往前延申,按照我的构造方法,如果不是这样那就不可能满足要求,因为3和5之间的路上的节点一定是全是小于3的数字,而且以3为根的子树我这里直接让他为空。这样的话总可以在前面找到足够数量的数字来插入到3的这一条链上(忽然感觉说不清楚了但是这么构造一定是对的emmmmm
wa的话感觉可能是当时很饿然后树上的插入操作和标记都写错n次,神奇的是每次都能通过前30个test然后被3x刷掉。。

继续阅读“[构造][树][贪心] codeforces 1041E Tree Reconstruction”

[XOR][思维][构造] codeforces 1016D Vasya And The Matrix

首先确定,什么时候是NO,因为把ai全部异或起来一定是整个矩阵全异或,bi同理所以这俩数字应该相等,xor为0,如果不为0一定是不存在的。所以,如果存在,那么a全部xor和b全部xor一定是相等的,记为tmp

否则的话,把b1到bm-1全放到第一行的左边m-1个空位,剩下的右边那个补上一个t使得这一行xor为a1,此时最右边一列的xor为tmp^a1^t=tmp^(b1^bi..^bm-1)==bm,所以这样构造的矩阵一定满足要求!!!
继续阅读“[XOR][思维][构造] codeforces 1016D Vasya And The Matrix”