首页 > 其他 > 详细

模拟13 题解(waiting)

时间:2019-08-06 22:32:36      阅读:124      评论:0      收藏:0      [点我收藏+]

T1[A. 矩阵游戏]

40%算法

首先注意几个性质:先乘后乘,或有没有0都一样,

记录下每一行,每一列乘的累计值$a_i b_j$

最后$ans=cal(i,j)*a_i*b_j$  其中cal为O(1)计算初始每个位置的值$O(nm)$枚举

100%算法

只需要把式子展开,然后就能分别O(n)O(m)计算

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #define R register
 6 #define int long long
 7 using namespace std;
 8 int read()
 9 {
10     int f=1,x=0;char ch=getchar();
11     while(ch>9||ch<0){if(ch==-)f=-1;ch=getchar();}
12     while(ch<=9&&ch>=0){x=(x<<3)+(x<<1)+ch-0;ch=getchar();}
13     return f*x;
14 }
15 const int maxn=1000005;
16 const int mod=1e9+7;
17 int n,m,k;
18 int a[maxn],b[maxn];
19 int fa[maxn],fb[maxn];
20 char opt[3];
21 int cal(int x,int y)
22 {
23     return ((x-1)*m%mod+y)%mod;
24 }
25 signed  main()
26 {
27 //    freopen("data","r",stdin);
28     n=read(),m=read(),k=read();
29     for(int i=1;i<=n;i++)
30         fa[i]=1;
31     for(int i=1;i<=m;i++)
32         fb[i]=1;
33     while(k--)
34     {
35         scanf("%s",opt);
36         R int x=read(),y=read();
37         if(opt[0]==R)
38         {
39             fa[x]=fa[x]*y%mod;
40         }
41         else 
42         {
43             fb[x]=fb[x]*y%mod;
44         }
45     }
46     int sum=0,dtb=0,ta=0;
47     for(int i=1;i<=n;i++){
48         ta=(ta+(i-1)*m%mod*fa[i]%mod)%mod;
49         dtb=(dtb+fa[i])%mod;
50     }
51     for(int j=1;j<=m;j++)
52         (sum+=fb[j]*ta%mod+j*fb[j]%mod*dtb%mod)%=mod;;
53     printf("%lld\n",sum%mod);
54 }
View Code

T2[B. 跳房子]「模拟」

 

模拟13 题解(waiting)

原文:https://www.cnblogs.com/casun547/p/11312067.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!