zoukankan      html  css  js  c++  java
  • AGC6 总结

    先开坑

    D.Median Pyramid Hard

    尝试把这道题做成数学题,推出了一个三项式系数斜线求和的东西。。数学学傻了

    还是听从fyy的教导,老老实实二分,真诚膜拜边老师

    考虑求中位数的常规操作二分中位数,将比$mid$小的数变为$-1$,比$mid$大的数变为$1$

    那么现在就是求出顶上是$-1$还是$1$

    关注轴线上的那些元素,可以发现如果轴线上的三个元素$n,n+1,n-1$有$2$个$1$或者$2$个$-1$连着,那么在向上递推的时候,这个两个连着的数是不会改变的,那么最后留下来的一定是连着的数字

    但如果是$1,-1$交替出现,考虑扩展上面那个做法,以轴线为中心点,向左右两边扩展直到找到$2$个连续的数字,第一次找到的数字就是答案,理由也是一样的

    需要特判全是$1,-1$交替的情况

    代码

    E.Rotate 3x3

    首先发现这种操作是不会改变一个元素所在的列,并且列中元素要么是升序要么是降序

    那么可以抽象为一开始给出一个排列$p$,每一个元素都带有$0$或$1$的数字$c$,$0$表示这个列是升序的,$1$表示这个列是降序的,操作是交换两个相邻奇偶性相同的元素,并将这个两个元素和中间的元素的$0/1$反转,问最后能不能得到$p_i=i,c_i=0$的序列

    那么可以发现,把奇数位上的元素变为有序的操次数的奇偶性,和把所有数字变为0操作次数的奇偶性相同的话,偶数也是一样

    对于将元素调整为有序的步数就是其逆序对的个数,对于奇偶分类统计逆序对

    那么现在就是要统计把所有数字变为$0$的操作数

    我想了一个比较复杂的做法,题解给出了更加简洁的做法

    可以发现存在一组操作,使得可以把相邻两个奇数位的元素交换,并且把将偶数位上一个位置$0/1$反转

    那么只需要统计出来奇偶位置上$1$的个数,奇数位$1$的个数和偶数位上的逆序对奇偶比较,偶数位$1$的个数和奇数位上的逆序对奇偶比较即可

    代码

    F.Blackout

    考虑将每一个数对转化为有向边,那么操作就是每一次找出来长度为$2$的链,将这个链补成一个三元环

    首先如果原图中有二元环或自环,最后得到的边数就是这个联通块中点数的平方,但这只是一个充分条件,不是必要条件

    现在考虑怎样图可以变成这种状态

    由于原来图上每一条边都是三元环上的某一条边,那么对于现在图上的点一定需要分成$3$个不相交的集合,使得边只存在于集合之间而不存在于集合内部

    那么可以给图三染色,如果染色成功并且三个颜色都用到了,那么说明不会出现自环或者二元环,那么得到的边数就是三个集合中选出两个集合连边数量之和

    如果染色成功但是有颜色没有用到,那么说明原图找不到一个长度为$2$的链,那么原图不会发生任何改变

    如果染色不成功,那么说明原图一定会产生自环或二元环直接统计答案

    代码

  • 相关阅读:
    298. Binary Tree Longest Consecutive Sequence
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    163. Missing Ranges
    336. Palindrome Pairs
    727. Minimum Window Subsequence
    211. Add and Search Word
    年底购物狂欢,移动支付安全不容忽视
    成为程序员前需要做的10件事
    全球首推iOS应用防破解技术!
  • 原文地址:https://www.cnblogs.com/huangchenyan/p/14033298.html
Copyright © 2011-2022 走看看