C题
思路:补全三角形之后 减去三个角的个数和
锁了代码一看人家,就写了三行。。
公式: (f + a + b)^2 - b^2 - f^2 - d^2
D题
忧伤。。本来觉得直接递归模拟会T,结果姿势正确还可以过。。
标程思路:化成字典序最小的串然后比较。。
1 /*Author :usedrose */ 2 /*Created Time :2015/7/23 8:02:58*/ 3 /*File Name :2.cpp*/ 4 #include5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include
E题
题意:从h*w的格子, 从左上角(1,1)走到右下角(h, w),要求不能经过给出的几个黑格子,求有多少种可能。
组合数+逆元搞一下。。
这个 %= , +=, 真是6。。。
1 /*Author :usedrose */ 2 /*Created Time :2015/7/23 9:08:32*/ 3 /*File Name :2.cpp*/ 4 #include5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include
附:
求 a / b = x (mod M)
只要 M 是一个素数,而且 b 不是 M 的倍数,就可以用一个逆元整数 b’,通过 a / b = a * b' (mod M)
,来以乘换除。
费马小定理说,对于素数 M 任意不是 M 的倍数的 b,都有:
b ^ (M-1) = 1 (mod M)
于是可以拆成:
b * b ^ (M-2) = 1 (mod M)
于是:
a / b = a / b * (b * b ^ (M-2)) = a * (b ^ (M-2)) (mod M)
也就是说我们要求的逆元就是 b ^ (M-2) (mod M)
!