UVA 11885 - Number of Battlefields(斐波那契)
2014-07-01 23:24
645 查看
11885 - Number of Battlefields
题意:给周长,求能围成的战场数目,不包括矩形。思路:具体的递推没递推出来,但是看了网上一个规律,如果包括矩形的答案应该是斐波那契数列(但是奇数情况为0),然后减去矩形数目就是答案,矩形数目为n / 2 - 1,用矩阵快速幂就能求了。
具体的递推过程哪位大神能指点下。。。
代码:
#include <stdio.h> #include <string.h> const long long MOD = 987654321; int p; struct mat { long long v[2][2]; mat() {memset(v, 0, sizeof(v));} mat operator *(mat c) { mat ans; for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { ans.v[i][j] = (ans.v[i][j] + v[i][k] * c.v[k][j] % MOD) % MOD; } } } return ans; } mat operator^(int k) { mat x = *this, ans; ans.v[0][0] = ans.v[1][1] = 1; while (k) { if (k&1) ans = ans * x; x = x * x; k >>= 1; } return ans; } }; int main() { while (~scanf("%d", &p) && p) { if(p % 2) {printf("0\n"); continue;} mat pri; pri.v[0][0] = pri.v[0][1] = pri.v[1][0] = 1; pri = pri^(p - 4); printf("%lld\n",(pri.v[0][0] - ((long long)p / 2 - 1) + MOD) % MOD); } return 0; }
相关文章推荐
- UVA 11885 - Number of Battlefields(斐波那契)
- Number of Battlefields UVA - 11885 矩阵快速幂
- uva 11885 - Number of Battlefields(矩阵高速幂)
- uva 11885 - Number of Battlefields(矩阵快速幂)
- UVa 11734 - Big Number of Teams will Solve This
- 【并查集】【枚举倍数】UVALive - 7638 - Number of Connected Components
- UVA11734_Big Number of Teams will Solve This
- UVa 1297 - The Minimum Number of Rooks
- toj 4613 Number of Battlefields
- hbase ERROR: wrong number of arguments (3 for 4)
- UVa 10887-Concatenation of Languages JAVA
- UVA 11292 Dragon of Loowater
- uva 10168 Summation of Four Primes(数论-哥德巴赫猜想)
- LeetCode之17_Letter Combinations of a Phone Number
- Android开发 Error(建议收藏下来以备不时之需):The number of method references in a .dex file cannot exceed 64K.
- UVA 437 十九 The Tower of Babylon
- 船只数目 number of boats
- [LeetCode] Letter Combinations of a Phone Number 电话号码的字母组合
- Letter Combinations of a Phone Number
- UVALive3523-Knights of the Round Table(BCC+二分图判定)