2017 4月半总结

4月开始试着拿workflowy写了半个月的每日记录。既然博客重开了,还是转移到博客上为好。

  • 4月3日
    • uvalive 5107 A hard Aoshu Problem
      • 2010 福州 H题
      • 题意
        • 给三个只由ABCDE组成的字符串,现在ABCDE分别代表一个数字0~9,不同字母代表不同的数字,问总共有多少种方案使得算式成立
      • 题解
        • 生成排列然后判断就好
        • 首先需要加一个离散化,因为ABCDE可能不全,如第二个数据只出现BCD,离散化成ABC好操作
      • 代码
    • uvalive 5105 Selecting courses
      • 2010 福州 J
      • 题意
        • 有N个区间可以选课
        • 你只能5分钟选一次,这个时间点要么选,要么不选,问最多可以选几个
      • 题解
        • 这个经典贪心问题,以结束时间早的来排序,先选这个,因为结束时间晚的后面还有机会
        • 然后枚举0~4开头,因为5开头相当与0开头 + 5
      • 代码
  • 4月4日
    • hdu 5978 To begin or not to begin
    • hdu 5979 Convex
      • 2016 大连赛区 I 题
      • 当时情况 2/44 WYF在搞,我看都没看,当然了,他1WA之后我就去写J题了,J题也写了很久
      • 题意
        “一个多边形,N个点,每个点到原点的距离都一样,是D,再告诉相邻两条边的夹角,问这个多边形的面积”
        • 那就是这N个三角形面积之和了,1/2absinθ
        • 然后θ换成弧度制 /180 * M_PI
        • M_PI需要使用 # define _USE_MATH_DEFINES不然会HDU过不了(不过uvalive上这一套题都交不了)
      • http://git.oschina.net/yygist/codes/4d6yh17jzt20kbc5urwen19
    • hdu 5980 Find Small A
      • 2016 大连赛区 J题
      • 当时情况 3/87 一直都是我在搞 也就是一个半小时才作出两道题,这不GG有鬼= =
      • 原因分析 首先题目没看太懂 这个可能是最主要原因,其次很多东西都不知道,比如可以拿python看下2进制啊这样的,sprintf,这个当时估计也是知道,但是没有使出来
      • 题意
        • 给一个数,这个数里的2进制有多少个A。
        • 相当于32进制里面有多少个a
      • 题解
        • 那就sprintf输出16进制然后看就好了
      • 代码
    • hdu 5974 A Simple Math Problem
      • 2016 大连赛区 D题
      • 当时情况 2/121 这道题应该算是做的比较正常的,我先推了一下,然而WYF推了一下,发现我想复杂了,然后写了一下,1WA好像是freopen忘记去掉了,尴尬
      • 题意
        • 解方程 x + y = a lcm(x,y) = b,现在给出a,b求x,y
      • 题解
        • 很容易想到 设gcd(x, y) = c
        • x = k1c, y = y2c, gcd(k1, k2) = 1
        • a = (k1+k2)c, b = k1k2*c
        • 既然k1,k2互质了,那么应该有 gcd(x,y) = gcd(a, b) = c
        • 那只要解出k1 k2就好了
        • 设k1 + k2 = a/c = A, k1 * k2 = b/c = B
        • 解得 k2 = (A + sqrt(A^2 - 4*B)) / 2, k1 = A - k2
        • No Solution直接带入判断就好,此题HDU卡得较紧,如果直接判断__gcd(x, y)会TLE,直接用__gcd(x, y) = c则不会
      • 代码
    • hdu 5971 Wrestling Match
      • 2016 大连赛区 A题
      • 当时情况 3/209 都是 WYF在搞 我按他的想法帮他DE了一个BUG
      • 他的方法应该就是暴力,不过具体细节怎么搞的,我不是很能理解。事后他说应该是正解应该是并查集。
      • 题解
        • 提示是并查集的话显然不是那个判断图的联通性的并查集,此题要分成两组
        • 顺着并查集的往下想,可以想到一个点所连的全部边应该是1个集合的,这样就解决了大部分,不过还是不够
        • 可以想到用两个super root来记录good 和 bad
        • 然后,如果除去super root之后的集合个数如果 小于 3, 那么就可以随便安置这两个集合,输出yes,但是如果是3个集合,那么就输出NO。对应题目样例的情况。
      • 代码
        http://git.oschina.net/yygist/codes/6xsoe1wnup8zd9c2kvmtj79
    • hdu 5976 Detachment
      • 2016 大连F题
      • 当时情况 4/284 WYF最后一刻钟搞定,用了线段树,不知道他怎么高级搞出来的
      • 题意
        • 给一个数X,让若干个数组成X,使这若干个数乘积最大
      • 题解
        • 容易推理出从2,3,…数越多越大
        • 剩下来的数再从后往前依次加一
        • 那么首先找到 2 + 3 + 4 + … + n < x < 2 + 3 + 4 + … + n + 1
        • 这个Lower_bound就可以找到 我们用s数组记录前缀和, 设找到的s[r]
        • 此时有3种情况
          • s[r] + r + 1 == x,这样就是 2 * 3 * … * r + 1
          • s[r] + r == x, 注意 2…r 有r-1个数,也就是说把 2…r 变成 3…r + 1还是多1 所以要变成 3…r, r+2
          • s[r] + r < x, 那么从后往前依次加1,这样可以看出中间会缺1个数,别的一切正常
        • 可以用前缀积来处理,不过要除去缺的数,所以需要逆元
        • 逆元类似倒数,不过是模运算里面的 比如现在要算 (6 / 2) % MOD, 可以用 6 * inv(2) % MOD来算
        • 对于质数为模的逆元,有公式pow_mod(a, mod-2, mod)
        • 同时还有递推求逆元的公式,本题就是这个
        • 知道了这些,就容易做了
        • 特别注意 x = 1 的情况
      • 代码
  • 4月5日
    • POJ 1741 Tree
    • 树的点分治第1题
    • http://git.oschina.net/yygist/codes/acd3u2yxpwsvhot6ink7f85
    • 题意
      • 给一棵树,编号1~N,问满足两点之间距离不超过k的点对个数
    • 题解
      • 树的重心 centroid
        • 满足这个节点的子树中的节点个数最大的最小
        • 以树的重心作为分治的点,把原树分成两个子树,这两个子数最平均,效果最好
      • 如何找树的重心
        • DFS就好
        • 用sz[i] 表示以i为根的子树的点数
        • maxsubsz[u]表示u的子树里面最大的点数
        • 然后用min_max维护maxsubsz就可以找到了
      • 回到此题
        • 考虑一个节点s,只要找出这个节点的子孙节点i,j满足d(s,i) + d(s,j) < k就好了
        • 但是要排除i,j在同一个子树里面,不然d(s,i) + d(s,j) > d(i,j), 以上情况是d(s,i) + d(s, j) == d(i,j)
        • 我们用calcdis把节点s的全部子节点以及到s的距离存在d里面,对d排序,然后通过一头一尾两个指针就可以O(n)的时间里算出全部d(i,s) + d(j,s) < k的情况
        • 注意,这个s永远是重心,因为这样才满足最平均
        • 然后将重心标记,这样下次访问到重心的时候就会被截断,找不到
        • 接下来排除上述那种情况,直接找这个节点里面全部的子节点满足上述的,然后ans
      • 接下来DFS
        • 特别注意每一次的重心会变,所以需要用临时变量来存中心
  • 4月6日
    • 做了NOIp2016 day1 水题一枚
    • day2 90分
  • 4月7日
    • 研究了一下PC2 ICPC官方环境
  • 4月8日
    • 比了蓝桥杯
  • 4月9日
    • 训练赛4题
  • 4月10日
    • 心情不好 没做
  • 4月11日
    • 学习了shift and 算法
    • 尝试解决icpc2016大连 此题,杭电输入要求太高,超时
  • 4月12日
  • 4月13日
    • 团队训练 2015上海网络赛
    • 4道
      • 线段树
      • 水题
      • 数学
      • 数学几何

之后的故事,就继续在这个blog里了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值