/*
Code by @marlov
*/
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <iomanip>
#include <utility>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <queue>
#include <iterator>
using namespace std;
typedef long long ll;
typedef pair<long long,long long> pi;
#define maxV 1000002
#define MOD 1000000007
//const long long MOD=1000000007;
long long N,M,K;
long long sum=0;
unordered_set<long long> cols;
unordered_set<long long> rows;
long long cm[maxV];
long long rm[maxV];
long long qsum(long long T,long long s,long long e){
T%=MOD;
s%=MOD;
e%=MOD;
if(T%2==0) return ((T/2)*(s+e))%MOD;
else return (((s+e)/2)*(T))%MOD;
}
void add(long long v){
sum+=v;
sum%=MOD;
}
void sub(long long v){
sum-=v;
while(sum<0) sum+=MOD;
sum%=MOD;
}
void mult(long long v){
sum*=v;
sum%=MOD;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>N>>M>>K;
fill(cm,cm+maxV,1);
fill(rm,rm+maxV,1);
char c;
long long x,m;
for(long long i=0;i<K;i++){
cin>>c>>x>>m;
x--;
if(c=='R'){
rows.insert(x);
rm[x]*=m;
rm[x]%=MOD;
}else if(c=='S'){
cols.insert(x);
cm[x]*=m;
cm[x]%=MOD;
}
}
for(long long i=0;i<N;i++){
add(rm[i]*(qsum(M,i*M+1,i*M+M)));
//sum+=MOD;
}
//cout<<"1st: "<<sum<<'\n';
for(long long i:cols){
//cout<<(qsum(N,i+1,(N-1)*M+i+1))<<'\n';
add((cm[i]-1)*(qsum(N,i+1,(N-1)*M+i+1)));
//sum+=MOD;
}
//cout<<"2nd: "<<sum<<'\n';
for(long long i:cols){
for(long long j:rows){
long long cv=M*j+i+1;
sub((cm[i]+rm[j]-1)*cv);
//sum+=MOD;
add((cm[i]*rm[j])*cv);
}
}
cout<<sum<<'\n';
return 0;
}
/* stuff you should look for
* long long overflow, array bounds
* special cases (n=1,n=0?)
* do smth instead of nothing and stay organized
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
90 ms |
16000 KB |
Output isn't correct |
2 |
Execution timed out |
1091 ms |
16000 KB |
Time limit exceeded |
3 |
Incorrect |
77 ms |
16000 KB |
Output isn't correct |
4 |
Incorrect |
140 ms |
16000 KB |
Output isn't correct |
5 |
Execution timed out |
1083 ms |
16000 KB |
Time limit exceeded |
6 |
Incorrect |
774 ms |
16120 KB |
Output isn't correct |
7 |
Execution timed out |
1083 ms |
16000 KB |
Time limit exceeded |
8 |
Incorrect |
988 ms |
16000 KB |
Output isn't correct |
9 |
Execution timed out |
1053 ms |
16000 KB |
Time limit exceeded |
10 |
Execution timed out |
1094 ms |
16000 KB |
Time limit exceeded |
11 |
Execution timed out |
1087 ms |
16000 KB |
Time limit exceeded |
12 |
Execution timed out |
1085 ms |
16000 KB |
Time limit exceeded |
13 |
Execution timed out |
1090 ms |
16000 KB |
Time limit exceeded |
14 |
Execution timed out |
1089 ms |
16000 KB |
Time limit exceeded |
15 |
Execution timed out |
1086 ms |
16000 KB |
Time limit exceeded |
16 |
Execution timed out |
1091 ms |
16000 KB |
Time limit exceeded |
17 |
Execution timed out |
1091 ms |
16000 KB |
Time limit exceeded |
18 |
Execution timed out |
1094 ms |
16000 KB |
Time limit exceeded |
19 |
Execution timed out |
1093 ms |
16000 KB |
Time limit exceeded |
20 |
Execution timed out |
1086 ms |
16000 KB |
Time limit exceeded |