【bzoj1712】[Usaco2007 China]Summing Sums 加密 矩阵乘法
题目描述
.jpg)
输入
输出
样例输入
3 4
1
0
4
样例输出
26
25
29
题解
矩阵乘法
令原数和加密后的数构成一个矩阵,设矩阵a为[ci,sum-ci],则加密一次后的矩阵A为[sum-ci,(n-1)sum-(sum-ci)],
因为显而易见所有数加密一次后总和变为原来的n-1倍。
推出a乘矩阵[[0,n-1],[1,n-2]]可以得到A,设这个矩阵为b。
按照这个规律,加密T次和T+1次构成的矩阵为a*bt。
对于每个数,处理出矩阵a,就可以用快速幂解决a*bt,得到加密t次的数。
注意要开long long
#include <cstdio>
#include <cstring>
#define MOD 98765431
typedef long long lint;
struct matrix
{
int x , y;
lint num[3][3];
matrix operator*(const matrix a) const
{
matrix t;
int i , j , k;
memset(t.num , 0 , sizeof(t.num));
t.x = x , t.y = a.y;
for(i = 1 ; i <= t.x ; i ++ )
for(j = 1 ; j <= t.y ; j ++ )
for(k = 1 ; k <= y ; k ++ )
t.num[i][j] = (t.num[i][j] + num[i][k] * a.num[k][j]) % MOD;
return t;
}
}a , b;
lint c[50010];
matrix qpow(matrix a , int b)
{
matrix t;
int i;
t.x = a.x , t.y = a.y;
memset(t.num , 0 , sizeof(t.num));
for(i = 1 ; i <= t.x ; i ++ )
t.num[i][i] = 1;
while(b)
{
if(b & 1)
t = t * a;
a = a * a;
b >>= 1;
}
return t;
}
int main()
{
int n , t , i;
lint sum = 0;
scanf("%d%d" , &n , &t);
for(i = 1 ; i <= n ; i ++ )
scanf("%lld" , &c[i]) , sum = (sum + c[i]) % MOD;
b.x = b.y = 2;
b.num[1][1] = 0 , b.num[1][2] = n - 1 , b.num[2][1] = 1 , b.num[2][2] = n - 2;
b = qpow(b , t);
a.x = 1 , a.y = 2;
for(i = 1 ; i <= n ; i ++ )
{
a.num[1][1] = c[i] , a.num[1][2] = (sum - c[i] + MOD) % MOD;
printf("%lld\n" , (a * b).num[1][1]);
}
return 0;
}
【bzoj1712】[Usaco2007 China]Summing Sums 加密 矩阵乘法的更多相关文章
- BZOJ1712 : [Usaco2007 China]Summing Sums 加密
设$s[i]$为进行$i$次加密后所有奶牛数字的和,有$s[i]=(n-1)s[i-1]$. 设$c[i]$为某头固定的奶牛进行$i$次加密后的数字, 若$i$为奇数,有: \[c[i]=((1-n) ...
- BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法 Description 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛 ...
- bzoj 1712: [Usaco2007 China]Summing Sums 加密
1712: [Usaco2007 China]Summing Sums 加密 Description 那N只可爱的奶牛刚刚学习了有关密码的许多算法,终于,她们创造出了属于奶牛的加密方法.由于她 ...
- 1712: [Usaco2007 China]Summing Sums 加密
1712: [Usaco2007 China]Summing Sums 加密 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 338 Solved: 12 ...
- 【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法
[BZOJ1706][usaco2007 Nov]relays 奶牛接力跑 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项 ...
- 倍增&矩阵乘法 专题复习
倍增&矩阵乘法 专题复习 PreWords 这两个基础算法我就不多说啦,但是还是要介绍一下" 广义矩阵 "乘法 其实就是把矩阵换成取\(max\),然后都一样... 据神仙 ...
- *HDU2254 矩阵乘法
奥运 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- *HDU 1757 矩阵乘法
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
随机推荐
- 北京Uber优步司机奖励政策(3月18日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- spring源码-bean之加载-2
一.前面说了bean的容器初始化,后面当然是说bean的加载.这里还是不讲解ApplicationContext的bean的加载过程,还是通过最基础的XmlBeanFactory来进行讲解,主要是熟悉 ...
- 用PowerDesign反向生成数据库Sql语句问题
在用Pd15反向生成数据库时,生成的Sql语句在Sql Server Manager Studio里面报错,根本就执行不了.数据库用的是Sql Server 2008 R2.经过一番修 ...
- mysql 常用语句使用
1.查询语句 SELECT * FROM table 2.更改语句 UPDATE table SET name = '123456' WHERE id = 100 3.插入语句 INSERT INTO ...
- Selenium(Python) ddt读取MySQL数据驱动
import unittestfrom time import sleep from ddt import ddt, datafrom pymysql import connectfrom selen ...
- 接口测试工具postman(六)添加变量(参数化)
1.添加全局变量并引用 2.通过设置请求前置配置变量 3.在Tests里面,把响应数据设置为变量 4.添加外部文件,引用外部文件中的变量和数据,此种场景就可以执行多次请求 1)配置文件,txt或者cs ...
- Monkey用真机做测试的步骤
1 必备条件 1) 手机需要先获取root权限: 2) 手机和电脑相连(电脑可以访问手机里面的文件) 2 操作步骤 1) 使用adb devices 命令查看电脑手机是否相连: 下图表示手机已连上电 ...
- ISE 14.7安装教程最新版(Win10安装)——解决Win10安装完后打不开快捷方式的方法
ISE 14.7安装教程最新版(Win10安装) Xilinx ISE是一款世界著名的硬件设计软件,它为设计流程的每一步都提供了直观的生产力增强工具,覆盖从系统级设计探索.软件开发和基于HDL硬件设计 ...
- TPO-16 C1 Reserve the room for a rehearsal
TPO-16 C1 Reserve the room for a rehearsal 第 1 段 1.Listen to a conversation between a Student and a ...
- Django2.1新手图文入门教程
第一个django Web Django2.1新手图文入门教程 http://www.liujiangblog.com/blog/36/