Submission #309887

#TimeUsernameProblemLanguageResultExecution timeMemory
309887MarlovAutomobil (COCI17_automobil)C++14
85 / 100
47 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 //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 add(long long a,long long b){ a+=b; while(a<0) a+=MOD; return a%MOD; } long long sub(long long a,long long b){ a-=b; while(a<0) a+=MOD; return a%MOD; } long long mult(long long a,long long b){ a*=b; return a%MOD; } long long qsum(long long T,long long s,long long e){ T%=MOD; s%=MOD; e%=MOD; if(T%2==0) return mult(T/2,add(s,e)); else return mult(T,add(s,e)/2); } 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]=mult(rm[x],m); }else if(c=='S'){ cols.insert(x); cm[x]=mult(cm[x],m); } } for(long long i=0;i<N;i++){ sum=add( sum , mult(rm[i],(qsum(M,mult(i,M)+1,mult(i,M)+M))) ); } for(long long i=0;i<M;i++){ sum=add(sum, mult((cm[i]-1),(qsum(N,i+1,mult(N-1,M)+i+1))) ); } //cout<<"2nd: "<<sum<<'\n'; for(long long i:cols){ for(long long j:rows){ long long cv=(M*j+i+1)%MOD; sum=sub(sum,mult(add(cm[i]-1,rm[j]),cv) ); //sum+=MOD; sum=add(sum, mult( mult(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 timeMemoryGrader output
Fetching results...