矩阵游戏(game)

——九校联考24OI__D1T1

问题描述

LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵。第一行的数字是1,2,…M,第二行的数字是M+1,M+2…2*M,以此类推,第N行的数字是(N-1)*M+1,(N-1)*M+2…N*M。

例如,N=3,M=4的矩阵是这样的:

1 2 3 4

5 6 7 8

9 10 11 12

对于身为智慧之神的LZK来说,这个矩阵过于无趣.于是他决定改造这个矩阵,改造会进行K次,每次改造会将矩阵的某一行或某一列乘上一个数字,你的任务是计算最终这个矩阵内所有数字的和,输出答案对109+7取模。

输入

第一行包含三个正整数N、M、K,表示矩阵的大小与改造次数。接下来的行,每行会是如下两种形式之一:

R X Y,表示将矩阵的第X(1 ≤ X ≤ N)行变为原来的Y(\(0\) ≤ Y ≤\(10^9\))倍.

S X Y,表示将矩阵的第X(1 ≤ X ≤ M)列变为原来的Y(\(0\) ≤ Y ≤\(10^9\))倍.

输出

输出一行一个整数,表示最终矩阵内所有元素的和对\(10^9+7\)取模的结果。

输入输出样例

样例1

input

3 4 4

R 2 4

S 4 1

R 3 2

R 2 0

output

94

样例2

input

2 4 4

S 2 0

S 2 3

R 1 5

S 1 3

output

80

样例一的解释:操作结束之后矩阵会变成这样:

1 2 3 4

0 0 0 0

18 20 22 24

数据范围

40%的数据满足:1≤N,M≤1000;

80%的数据满足:1≤N,M≤1000000,1 ≤ K ≤1000;

100%的数据满足:1≤N,M≤1000000,1 ≤ K ≤100000。

解析

这道题看似是什么数据结构,其实就是数学题。

每一个行都是等差数列(列也是),求出每一行数字的和s[i]。每一次横行的乘法操作就是重构一下通项公式,每一次纵列的乘法操作就是改变每一个数列中的一项,至于每一行增加了多少,就用通项求那个数是多少,再求增加量,加到s[i]里。

别忘了开longlong,取模,好多同学都忘了这个。

代码

#include <bits/stdc++.h>
using namespace std;
int N,M,K;
const int MOD = (1e9) + 7;
int R[1000005];
int sumR;
int C[1000005];
int S;
int rez;
int element(int i,int j){
return (1LL * (i - 1) * M + j) % MOD;
}
int main()
{
// freopen("game.in","r",stdin);
// freopen("game.out","w",stdout);
for(int i = 1;i <= 1000000;i++){
R[i] = C[i] = 1;
}
cin >> N >> M >> K;
for(int i = 1;i <= K;i++){
char c;
int x,y;
cin >> c >> x >> y;
if(c == 'R'){
R[x] = 1LL * R[x] * y % MOD;
}
else {
C[x] = 1LL * C[x] * y % MOD;
}
}
for(int i = 1;i <= N;i++){
S = (1LL * S + 1LL * element(i,1) * R[i]) % MOD;
sumR += R[i];
if(sumR >= MOD){
sumR -= MOD;
}
}
for(int i = 1;i <= M;i++){
rez = (1LL * rez + 1LL * S * C[i]) % MOD;
if(rez >= MOD){
rez -= MOD;
}
S += sumR;
if(S >= MOD){
S -= MOD;
}
}
cout << rez<<endl;
return 0;
}

矩阵游戏(game)的更多相关文章

  1. ZJOI2007矩阵游戏

    题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: 行交 ...

  2. 【BZOJ】1059: [ZJOI2007]矩阵游戏(二分图匹配)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1059 本题可以看出,无论怎样变化,在同一行和同一列的数永远都不会分手---还是吐槽,,我第一眼yy了 ...

  3. 【BZOJ】【1059】【ZJOI2007】矩阵游戏

    二分图完美匹配/匈牙利算法 如果a[i][j]为黑点,我们就连边 i->j ,然后跑二分图最大匹配,看是否有完美匹配. <_<我们先考虑行变换:对于第 i 行,如果它第 j 位是黑点 ...

  4. 1059: [ZJOI2007]矩阵游戏 - BZOJ

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两 ...

  5. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  6. bzoj 1059: [ZJOI2007]矩阵游戏 二分图匹配

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1891  Solved: 919[Submit][Statu ...

  7. BZOJ 1059 矩阵游戏

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个\(N \times N\)黑白方阵进行(如同国际象棋一般,只是颜色是随意的). ...

  8. BZOJ 1059 [ZJOI2007]矩阵游戏

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2707  Solved: 1322[Submit][Stat ...

  9. bzoj 1059 [ZJOI2007]矩阵游戏(完美匹配)

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2993  Solved: 1451[Submit][Stat ...

  10. BZOJ 3240: [Noi2013]矩阵游戏

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1586  Solved: 698[Submit][Status ...

随机推荐

  1. C 语言 计算

    note1: 不要把表达式写的太复杂,不容易阅读和理解,容易造成读程序的误解,所以要避免写出复杂的表达式. note2:程序是按步执行的,程序表达的是顺序执行的动作,而不是关系.

  2. tail -f 命令暂停方法

    Linux 下查看日志时,使用 tail -f 可以不断的刷新日志信息. 例如: tail -f logs.log 此时要想暂停刷新,使用ctrl+s暂停终端.若想继续终端,使用ctrl+q. 若想退 ...

  3. 记一次使用getRequestDispatcher遇到的坑。。响应页面出现新建下载任务

    getRequestDispatcher RequestDispatcher接口提供将请求转发送到另一个资源的功能,它可能是html,servlet或jsp等. 此接口也可用于包括另一资源的内容.它是 ...

  4. Delphi ClientDataSet 主从结构 BUG

    使用ADO控件 .ClientDataSet .增加了从表与主表的关连字段 SheetID,别的设置全为默认.如图1所示 图1 ======= 问题 BUG: 打开主表与从表,先不对主表进行任何操作. ...

  5. 浅谈C#堆栈与托管堆的工作方式(转)

    C#初学者经常被问的几道辨析题,值类型与引用类型,装箱与拆箱,堆栈,这几个概念组合之间区别,看完此篇应该可以解惑. 俗话说,用思想编程的是文艺程序猿,用经验编程的是普通程序猿,用复制粘贴编程的是2B程 ...

  6. 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值

    可以在处理Post方法的Action添加一个特性:[ValidateInput(false)],这样处理就更加有针对性,提高页面的安全性. [HttpPost][ValidateInput(false ...

  7. 如何自学Java开发

    对于这个话题,已经不止N次在线上或线下听到了.从这个话题被太多的人提问及回答,我们可以肯定地说,Java这个已经有近15年头的计算机编程语言是有着及其广阔的应用领域和独特而短期无法替代的优势.我们姑且 ...

  8. 服务器还原阿里云Mysql数据库

    https://www.percona.com/doc/percona-xtrabackup/2.3/installation/yum_repo.html

  9. 结合之前看的一些东西,阅读RockMQ实战与原理解析笔记

    Topic有多个message queue,消息可以并行的向各个message queue发送,消费者也可以并行的从多个message queue读取消息并消费 clustering模式消费一个top ...

  10. TCP连接笔记

    每个socket套接字都有一个引用计数. 调用close时只是将相应的引用计数减1. 只有当引用计数为0时才会真正的清理套接字资源,也就是发送FIN. 若只是想在某个TCP连接上发送一个FIN可以改用 ...