博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 11885 - Number of Battlefields(矩阵高速幂)
阅读量:7040 次
发布时间:2019-06-28

本文共 1146 字,大约阅读时间需要 3 分钟。

题目大意:给出周长p,问多少种形状的周长为p的,而且该图形的最小包围矩阵的周长也是p,不包含矩形。

解题思路:矩阵高速幂。假设包括矩形的话,相应的则是斐波那契数列的偶数项,所以相应减去矩形的个数就可以。

#include 
#include
using namespace std;typedef long long ll;const ll MOD = 987654321;void mul(ll a[2][2], ll b[2][2], ll c[2][2]) { ll ans[2][2]; memset(ans, 0, sizeof(ans)); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) ans[i][j] = (ans[i][j] + a[i][k] * b[k][j]) % MOD; } } memcpy(c, ans, sizeof(ans));}void power (ll a[2][2], int n) { ll ans[2][2] = {
1, 0, 1, 0}; while (n) { if (n&1) mul(ans, a, ans); mul(a, a, a); n /= 2; } memcpy(a, ans, sizeof(ans));}int main () { int p; while (scanf("%d", &p) == 1 && p) { if (p&1 || p < 6) { printf("0\n"); continue; } p = (p - 4) / 2; ll a[2][2] = {
1, 1, 1, 0}; /* power(a, 2*p-1); printf("%lld\n", (a[0][0] + a[0][1] - p - 1 + MOD) % MOD); */ power(a, 2*p); printf("%lld\n", (a[1][0] - p - 1 + MOD) % MOD); } return 0;}
 

转载地址:http://xfxal.baihongyu.com/

你可能感兴趣的文章
多网卡的7种bond模式原理
查看>>
用update和replace在sql中替换某一个字段的部分内容
查看>>
Web框架原理
查看>>
HEX解码
查看>>
.pyc是什么鬼?
查看>>
golang 详解defer
查看>>
流程控制-for序列、流程控制-for字典
查看>>
Go语言之反射
查看>>
dTree JS 基本用法
查看>>
Android Things创客DIY第一课-用Android Things展示你的智能设备创意-基础篇
查看>>
[Lab1]-EIGRP试验
查看>>
bash的算术运算和条件测试语句基础
查看>>
uwsgi+django+nginx
查看>>
安装MASM32
查看>>
***如何优雅的选择字体(font-family)
查看>>
11.python并发入门(part12 初识协程)
查看>>
华为NE40 V800 XPL功能初体验
查看>>
thinkphp3.1随机取数据库中几条记录
查看>>
设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,
查看>>
ORA-01652 even though there is sufficient space in RECYCLE BIN
查看>>