2018.8.12

T1

 

原题是 HDU 的 Frog

 

是一道容斥的题,但是考试的时候想到了大概的做法但是卡在了容斥,并且没有最后时间了所以所以就写了个20分暴力则啧啧难受

 

首先根据某一个点 X 能够被占领一定满足:X = a [ i ] * q - p * M,所以根据扩展欧几里得的有解性质 X 必须是 a [ i ] 和 M 的倍数,由于较大的 X1 会被较小的 X2 所计算,所以我们要找的最小的 X0 就是 Gcd(a [ i ],M),所以我们首先保存一下每一个 a 与 M 的 Gcd 就好了!

 

那么所有能够被占据的点一定是一个以 M 结尾的等差数列啦,一共有 M / Gcd + 1 这么多个(小学奥数),总和是 M * (M / Gcd + 1)(小学奥数),还要减去 M 因为 M 点永远不可能被占领!

 

但是有些 Gcd 是没有用的啊,因为如果有更小的 Gcd ' 并且 Gcd ' 是 Gcd 的因子,那么 Gcd ' 一定可以计算到 Gcd 所占领的所有地方,那么 Gcd 可以滚了

 

用一个数组 q 存储所有有用的 Gcd,每次遇到一个 Gcd 和队列里的一定有用的 Gcd 比较看看当前的 Gcd 何去何从就好了

 

容斥是大问题

 

由于有用的 Gcd 最多只有10多个,那么可以直接状压或者 Dfs 容斥就好了,奇加偶减(因为 Gcd 的 Lcm 是会重复的)

 

T2

 

数位 Dp 的水题,(最开始没有识别出来想了好久看复杂度以为是快速幂 qwq)……

 

T3

 

考场上没时间了 T2 耗了太久(虽然做出来了不亏)导致 20 暴力写得太快了,居然错了…… 直接掉了 3 个 Rk(150 的 3 个 www),但是差不多有些思路是对的,比如想到了合并横纵的贡献,没有时间想 www ……

 

可以发现其他行对于某一行的所有点的贡献都是一样的,与处理一下就好了 ……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值