Submission #308755

#TimeUsernameProblemLanguageResultExecution timeMemory
308755MarlovAutomobil (COCI17_automobil)C++14
0 / 100
22 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 long long N,M,K; long long sum=0; set<long long> cols; 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; } 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++){ sum+=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'; sum+=(cm[i]-1)*(qsum(N,i+1,(N-1)*M+i+1)); sum+=MOD; sum%=MOD; } //cout<<"2nd: "<<sum<<'\n'; for(long long i:cols){ for(long long j:rows){ long long cv=M*j+i+1; sum-=(cm[i]+rm[j]-1)*cv; sum+=MOD; sum%=MOD; sum+=(cm[i]*rm[j])*cv; sum%=MOD; } } 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 timeMemoryGrader output
Fetching results...