Submission #308325

#TimeUsernameProblemLanguageResultExecution timeMemory
308325MarlovAutomobil (COCI17_automobil)C++14
25 / 100
25 ms16128 KiB
/*
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
 
struct mult{
	char c;
	long long x,m;
};
 
long long N,M,K;
long long sum=0;
long long row[maxV];
long long col[maxV];
mult arr[1000];
set<long long> rws;
set<long long> cls;
 
long long vRow(long long n){
	long long val=(M*((M*n+1)+(M*n+M)))/2;
	val%=MOD;
//	val+=M*n;
	return val%MOD;
}
long long vCol(long long n){
	long long val=(N*(n+1+n+1+M*(N-1)))/2;
	return val%MOD;
}
 
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin>>N>>M>>K;
	fill(row,row+maxV,1);
	fill(col,col+maxV,1);
	for(long long i=0;i<K;i++){
		cin>>arr[i].c>>arr[i].x>>arr[i].m;
		arr[i].x--;
		if(arr[i].c=='R'){
			row[arr[i].x]*=arr[i].m;
			row[arr[i].x]%=MOD;
			rws.insert(arr[i].x);
		}else if(arr[i].c=='S'){
			col[arr[i].x]*=arr[i].m;
			col[arr[i].x]%=MOD;
			cls.insert(arr[i].x);
		}
	}
	for(long long cr:rws){
		for(long long cc:cls){
			long long cv=cr*M+cc+1;
			sum+=cv;
			sum-=row[cr]*cv;
			sum-=col[cc]*cv;
			sum%=MOD;
			//cout<<sum<<"\n";
			sum+=((row[cr]*col[cc])%MOD)*cv;
			sum%=MOD;
			//cout<<cv<<" creates "<<sum<<'\n';
		}
	}
	//for rows
	//cout<<sum<<'\n';
	for(long long i=0;i<N;i++){
		//cout<<vRow(i)<<'\n';
		sum+=(row[i])*vRow(i);
		//cout<<"row "<<i<<": "<<sum<<'\n';
		sum%=MOD;
	}
	//for col
	for(long long i=0;i<M;i++){
		//cout<<vCol(i)<<'\n';
		sum+=(col[i])*vCol(i);
		//cout<<"col "<<i<<": "<<sum<<'\n';
		sum%=MOD;
	}
	sum-=(((N*M)*(1+N*M))/2)%MOD;
	cout<<sum%MOD<<'\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
*/
#Verdict Execution timeMemoryGrader output
Fetching results...