开个新坑。。
所谓简单计数问题, 就是运用组合数学或者一些计数技巧,去统计某个对象的个数。这些题往往码量不大, 思路灵活。如果这方面的“直觉”很强的话, 解题会很轻松。
codeforces 70C - Lucky Tickets
容易想到的是, 给定一个区间, 在 nlogn 内求出其 good pairs 的计数。即对 first , 维护 i / rev[i] 的个数。然后枚举 second,加上 query( key = rev[j] / j )。
怎样满足 x * y 最小呢?
x 不变, 则 x * y 是单调的, 而 tot 也是随 y 递增的。
所以就可以使用一个类似 two pointer 的算法, 利用单调性在 O(Xlog(X) + Ylog(Y))的时间内求解。
codeforces 295C - Greg and Friends
状态: (左岸体重为50的人数,左岸体重为100的人数,船的位置)
转移: 人是不同的,用组合公式选上船的人的方案数。。。