数字游戏(number)

题目大意

不高兴找到了一个N行M列的矩阵。矩阵的第一行数字为 1,2,3,...,M1,2,3,...,M1,2,3,...,M,第二行数字为 M+1,M+2,...,2×MM+1,M+2,...,2 \times MM+1,M+2,...,2×M,第 NNN 行数字为 (N−1)×M+1,(N−1)×M+2,...,N×M(N-1)\times M+1,(N-1) \times M+2,...,N \times M(N−1)×M+1,(N−1)×M+2,...,N×M。

例如,对于 N=3,M=4N=3,M=4N=3,M=4 :

1  2  3  4
5  6  7  8
9 10 11 12

当然这样的矩阵是无趣的,所有他选择了其中一行或一列,将其乘以非负数,会进行 KKK 次。最后他想知道矩阵中所有值的总和。由于总和可能会很大,需要总和模109+7。\color{red}{由于总和可能会很大,需要总和模 \ 10^9+7。}由于总和可能会很大,需要总和模 109+7。

数据范围:

对于 50%50\%50% 的数据,1<=N,M<=10001<=N,M<=10001<=N,M<=1000。

对于 100%100\%100% 的数据,1<=N,M<=1000000,1<=K<=1000,0<=X,Y<=1091<=N,M<=1000000,1<=K<=1000,0<=X,Y<=10^91<=N,M<=1000000,1<=K<=1000,0<=X,Y<=109。

解题思路

注意:由于本蒟蒻的习惯,可能会对大家造成影响。

∑i=1n→\sum_{i=1}^{n} \to∑i=1n​→ 这是求和。

∑i=1n→\sum\limits_{i=1}^{n} \toi=1∑n​→ 这是循环。

一开始可以想到对于所有操作,暴力修改一遍,时间复杂度为 O(nk)O(nk)O(nk),可拿 50pts50pts50pts。(艹,为什么模拟赛时没打暴力?我是sb吗???

继续思考,显然可以将所有的操作全部合起来,搞一个离线算法。

即记 hangihang_ihangi​ 为第 iii 行要乘上的非负数,lieilie_iliei​ 为第 iii 列要乘上的非负数。

由于我们不能同时修改行和列,所以先选个修改列,再修改行吧。

此时可以发现,对于原矩阵 aaa,ai,j=ai−1,j+ma_{i,j} = a_{i-1,j} + mai,j​=ai−1,j​+m,所以在原矩阵中,第 iii 行比第 i−1i-1i−1 行多 m2m^2m2,因此可以将第一行当做基准,依次求得第二行,第三行…第 nnn 行。

1    2    3    4
1+m  2+m  3+m  4+m
1+2m 2+2m 3+2m 4+2m

发现规律后,就可以开始修改列了,此时又可以发现,对于修改完列后的矩阵 bbb,bi,jb_{i,j}bi,j​ 比 bi−1,jb_{i-1,j}bi−1,j​ 多 m×liejm\times lie_jm×liej​,第 iii 行比第 i−1i-1i−1 行多 a=∑k=1mliek×ma=\sum_{k=1}^{m} lie_k \times ma=∑k=1m​liek​×m。

显然对于修改列后的矩阵 bbb,每一行的相差数也是不变的。

例如将第 222 列乘上 222:

1  4  3  4
5 12  7  8
9 20 11 12

此时 lielielie 数组为

1 2 1 1

则 bi,j=bi−1,j+m×liejb_{i,j} = b_{i-1,j}+m\times lie_jbi,j​=bi−1,j​+m×liej​。

先计算修改完列后的矩阵 bbb 第 111 行的和为 b=∑k=1mliek×ib=\sum_{k=1}^{m} lie_k \times ib=∑k=1m​liek​×i( iii 为原矩阵 aaa 第 111 行的数)。

由上可得,修改完列后的矩阵 bbb 第 iii 行的和为 b+a×(i−1)b+a \times (i-1)b+a×(i−1)。

则答案矩阵 ccc 第 iii 行的和就为修改完列后的矩阵 bbb 第 iii 行的和乘上 hangihang_ihangi​,即为 b+a×(i−1)×hangib+a \times (i-1) \times hang_ib+a×(i−1)×hangi​

此时已经可以求得修改完列后的矩阵 bbb 每一行的和了,乘上 hangihang_ihangi​ 再累加就结束了。

然后,就没有然后了。

十年OI一场空,不开longlong见祖宗\color{red}{十年 \ OI \ 一场空,不开 \ long \ long \ 见祖宗}十年 OI 一场空,不开 long long 见祖宗

AC CODE

#include<bits/stdc++.h>
#define int long long
const int mod = 1e9 + 7;
using namespace std;int n, m, k;
int a, b, ans;
int lie[1000005], hang[1000005];signed main()
{scanf("%lld%lld%lld", &n, &m, &k);for(int i = 1; i <= m; ++i) lie[i] = 1;for(int i = 1; i <= n; ++i) hang[i] = 1;for(int i = 1; i <= k; ++i){char c[5];int a, b;scanf("%s", c);scanf("%lld%lld", &a, &b);if(c[0] == 'R') hang[a] = hang[a] * b % mod;else lie[a] = lie[a] * b % mod;}for(int i = 1; i <= m; ++i){a = (a + lie[i] * m % mod) % mod;// a += lie[i] * m;// 修改完列的矩阵 b 每一行的相差数。b = (b + lie[i] * i % mod) % mod;// b += lie[i] * i;// 求修改完列的矩阵 b 的第一行的和。}for(int i = 1; i <= n; ++i){ans = (ans + (b + a * (i - 1) % mod) * hang[i] % mod) % mod;// ans += b + a * (i - 1) * hang[i];// 求答案,这不用说了吧。}printf("%lld", ans % mod);return 0;
}

数字游戏(number)相关推荐

  1. 【2019CSP-J 普及组题解】数字游戏(number),公交换乘(transfer),纪念品(souvenir),加工领奖(work) CSP普及游记

    文章目录 T1:数字游戏 题目 CODE T2:公交换乘 题目 CODE T3:纪念品 题目 题解 CODE T4:加工领奖 题目 题解 CODE 关于普及组的想法&游记 T1:数字游戏 题目 ...

  2. 数字游戏 (number)

    一道十分毒瘤的模拟题.代码很短,推我花了二三十分钟. 数字游戏 传送门 - 数字游戏 Description 不高兴找到了一个 NNN 行 MMM 列的矩阵. 矩阵的第一行数字为 111 , 222 ...

  3. 2019年CSP-J2第一题:数字游戏(number)题解

    题目来源 2019年CSP-J第二轮认证,第一题数字游戏. 题面链接:http://47.110.135.197/problem.php?id=5076. 题面 小 K 同学向小 P 同学发送了一个长 ...

  4. bzoj:1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏

    Description 奶牛们又在玩一种无聊的数字游戏.输得很郁闷的贝茜想请你写个程序来帮她在开局时预测结果.在游戏的开始,每头牛都会得到一个数N(1<=N<=1,000,000).此时奶 ...

  5. python猜数字游戏简单-python猜数字游戏快速求解解决方案

    python猜数字游戏快速求解解决方案.使用方法: 1. 保存代码为guessall.py 2. 执行python guessall.py > result.txt 3. 打开result.tx ...

  6. python游戏最简单代码-如何利用Python开发一个简单的猜数字游戏

    前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(high)&q ...

  7. python写一个游戏多少代码-Python项目实战之猜数字游戏(含实现代码)

    猜数字游戏,旨在提高初学者对 Python 变量类型以及循环结构的使用. 此游戏的游戏规则如下:程序随机内置一个位于一定范围内的数字作为猜测的结果,由用户猜测此数字.用户每猜测一次,由系统提示猜测结果 ...

  8. 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game

    洛谷 2953  [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...

  9. python猜数游戏流程_Python 猜数字游戏

    游戏内容:猜数字游戏 游戏过程描述 程序运行起来,随机在某个范围内选择一个整数. 提示用户输入数字,也就是猜程序随即选的那个数字. 程序将用户输入的数字与自己选定的对比,一样则用户完成游戏,否则继续猜 ...

  10. 《Python游戏编程快速上手》第三章-猜数字游戏

    有段时间没有写博客了,最近在看<Python游戏编程快速上手>一书,计划自己用python写个小游戏玩玩.所以接下来我会把这本书中的所有游戏例子自己实现一遍,然后开始写一个自己的小游戏,话 ...

最新文章

  1. Git使用笔记(一)
  2. winform下载网页源码
  3. “export ‘default‘ (imported as ‘echarts‘) was not found in ‘echarts‘
  4. C语言小白适合入门的项目——扫雷
  5. Lync和Exchange 2013集成PART4:配置统一存档
  6. 【API进阶之路】高考要考口语?我用多模态评测API做了一场10w+刷屏活动
  7. AtomicReference 和 volatile 的区别
  8. poatman32位下载_Postman.dll下载|Postman.dll下载官方版【32位|64位】-太平洋下载中心...
  9. Alpha、Beta、RC、GA、RTM、OEM等版本的解释
  10. Python新手到熟练的百天之路
  11. 这四种加薪理由,肯定没戏!
  12. python遍历二维秋天_只要一杯秋天的奶茶,就能学会Python数值分析(1)
  13. 使用lombok时,get/set方法冒红问题
  14. Redis 如何实现库存扣减操作和防止被超卖?(荣耀典藏版)
  15. CSS3权威指南读书笔记
  16. 159.Vue实现个人博客(七)【Vue2.0-路由参数】 2019.03.15
  17. Three——二、加强对三维空间的认识
  18. 小米手机第一次使用SSR提示“创建一个XXX链接”,无法点击确定
  19. 【Java】进制转换
  20. B站兄弟连Linux视频笔记

热门文章

  1. 【ES6】Reflect 反射
  2. win10服务器怎么连接显示器不亮,Win10检测不到第二个显示器怎么解决?Win10外接显示器黑屏解决方法...
  3. 从0到1搭建大数据平台之开篇
  4. Linux平台基于v4l2开发免驱摄像头-输出为Opencv Mat
  5. 分数换算小数补0法_小学数学常用公式大全(单位换算表),替孩子收藏一份...
  6. 大事务的处理方式对比
  7. Kali 解决默认启动HDMI没有声音问题
  8. python学习:用两种思路计算质数与合数
  9. 高一计算机会考英语作文,高一考试英语作文常考题目及范文
  10. 运行JavaScript代码片段的19种工具