10.07T1 找结论

1.矩阵游戏

(game.pas/c/cpp)

 

【问题描述】

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次,每次改造会将矩阵的某一行或某一列乘上一个数字,你的任务是计算最终这个矩阵内所有数字的和,输出答案对10

9

+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

样例2

game.in

game.out

game.in

game.out

 

94

2 4 4

S 2 0

S 2 3

R 1 5

S 1 3

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。

 

 

 

 

 

 

这题我竟然爆零了>_<

考虑分开行列来看我们先操作列的操作,我们可以计算出行行之间的新delta

然后每次加上新的delta乘上行的系数就是答案了(我tm竟然画出来了都没有看出来)

这种题实际上没有多难,看你能不能乱搞出什么结论,或者直接自己造几组数据(一般样例都比较坑)来发现规律,分开考虑啊!!!!

做的题目太少了

code:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 const long long mod=1e9+7;
 5 long long hang[1000005],lie[1000005];
 6 int main(){
 7     freopen("game.in","r",stdin);
 8     freopen("game.out","w",stdout);
 9     long long m,n,k;
10     cin>>n>>m>>k;
11     for(long long i=1;i<=n;i++)hang[i]=1;
12     for(long long i=1;i<=m;i++)lie[i]=1;
13     while(k--){
14         char t;
15         cin>>t;
16         if(t=='R'){
17             long long x,y;
18             cin>>x>>y;
19             hang[x]*=y;
20             hang[x]%=mod;
21         }
22         else{
23             long long x,y;
24             cin>>x>>y;
25             lie[x]*=y;
26             lie[x]%=mod;
27         }
28     }
29     long long cnt=0,delta=0;
30     long long ans=0;
31     for(long long i=1;i<=m;i++){
32         cnt=(cnt+1ll*i*lie[i]%mod)%mod;
33         delta+=1ll*m*lie[i];
34         delta%=mod;
35     }
36     for(long long i=1;i<=n;i++){
37         ans+=(1ll*cnt*hang[i])%mod;
38         ans%=mod;
39         cnt+=delta;
40         cnt%=mod;
41     }
42     cout<<ans;
43     return 0;
44 }

over

posted @ 2018-10-07 19:41  saionjisekai  阅读(49)  评论(0编辑  收藏  举报