T-V

Posted on 2022-12-12 15:49  Capterlliar  阅读(187)  评论(0编辑  收藏  举报

T. Bottom-Tier Reversals

题意:给出一个奇数长度的排列,每次操作可以选择一个奇数长度的前缀,并翻转它。求一种方案,在5n/2次操作内使得排列单调递增。

解:观察一下这个操作,发现奇数应该在奇数位,偶数应该在偶数位。再观察一下操作,每次翻转一个前缀,也就是排序的时候应该先让大的数归位。令最大数为n,先让它到1,再到n;接着排n-1,会动n,不妥。考虑两个一起排,即令n在1,n-1在2,然后翻转;介于最后翻转有1次操作,如果给的数没有骗人,前面只能用4次。n可以通过1到任意一个奇数位。介于动n-1一定会动n,所以先让n到n-1右边,但放到右边n-1又会动,退而求其次放到左边。然后再翻到3和2,然后再翻到1和2,完成。那么过程就是:n to 1,n to n-1左,(n, n-1) to (3, 2),(n-1, n) to (2, 1),(n-1, n) to (n-1, n). 重复以上过程即可。

U. Nastia and a Hidden Permutation

题意:交互题。有一个排列,每次可以选两个数,再选一种询问。询问如下,

要求在3n/2次询问内还原这个排列。

解:试图每次用3个询问求出两个数,先令x分别等于n-1和1,得到

 

先讨论pi=n的情况。如果pj=n,那么返回值是n;如果返回值是n-1,那么交换i和j,判断i究竟是不是n;pj=1同理。两条都没有的时候可以试试像右边一样再加一个判断,但到这里询问次数其实已经超了,所以没试(。那换个思路,先求出一个最值,然后拿最值判断其余数。上面已经得到了n位置的求法,之后用询问2,query(2, i, pos, 1)即可得到pi的值。注意输出完就fflush,不要等到scanf后再fflush。

V. Strange Housing

题意:给定一张无向图,要求给一些结点染色,其中一条边连接的两个结点不能同时染色,且删除两边都不染色的结点后整张图仍然联通。

解:随便抓一个结点出来试着染色,感觉边太多了,要是棵树就好了。随便抓一颗生成树出来乱染染按层染色,但这样放回到原图会有两边结点同时染色的情况。还是随便抓一个结点当根节点染色,然后遍历这棵树,大概上是如果一个结点周围有染色的结点,就不染,反之染。