Submission #309223

# Submission time Handle Problem Language Result Execution time Memory
309223 2020-10-02T22:32:57 Z Marlov Automobil (COCI17_automobil) C++14
0 / 100
1000 ms 16120 KB
/*
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
*/
# Verdict Execution time Memory 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