제출 #1308982

#제출 시각아이디문제언어결과실행 시간메모리
1308982rohit_flytsappAutomobil (COCI17_automobil)C++20
0 / 100
32 ms31760 KiB
#include<iostream> #include<vector> #include<set> using namespace std; using ll = long long int; ll mod = 1e9 + 7; ll get_el(ll x, ll y, ll m){ return x*m + y + 1; } int main(){ int n, m, k; cin>>n>>m>>k; vector<ll> row_mults(n, 1), col_mults(m, 1); set<int> rows_a; set<int> cols_a; for(int _=0; _<k; _++){ char s; int x; ll y; cin>>s>>x>>y; x--; if(y == 1) continue; if(s == 'R'){ row_mults[x] *= y; row_mults[x] %= mod; rows_a.insert(x); } if(s == 'S'){ col_mults[x] *= y; col_mults[x] %= mod; cols_a.insert(x); } } vector<ll> row_sum(n), col_sum(m); for(int i=0; i<n; i++){ ll a = ll(i)*ll(m) + 1LL; row_sum[i] = ll(m)*(2LL*a + ll(m-1)) / 2LL; row_sum[i] %= mod; } for(int i=0; i<m; i++){ ll a = i+1; col_sum[i] = ll(n)*(2LL*a + ll(n-1)*ll(m)) / 2LL; col_sum[i] %= mod; } ll answer = 0; for(auto &el: row_sum){ answer+=el; answer %= mod; } // cout<<"Answer raw: "<<answer<<"\n"; for(auto &i: rows_a){ // cout<<"Row "<<i<<": mult "<<row_mults[i]<<" sum "<<row_sum[i]<<" added "<<(row_mults[i]-1)*row_sum[i]<<"\n"; answer += (row_mults[i]-1) * row_sum[i]; answer %= mod; } for(auto &i: cols_a){ // cout<<"Col "<<i<<": mult "<<col_mults[i]<<" sum "<<col_sum[i]<<" added "<<(col_mults[i]-1)*col_sum[i]<<"\n"; answer += (col_mults[i]-1) * col_sum[i]; answer %= mod; } // cout<<"Answer mid: "<<answer<<"\n"; for(auto &r: rows_a){ for(auto &c: cols_a){ ll cell = get_el(r, c, m); ll min1 = row_mults[r] * cell; ll min2 = col_mults[c] * cell; ll add = row_mults[r] * col_mults[c] + cell; // cout<<"Accounting cell: "<<cell<<" row "<<r<<" col "<<c // <<" deleting "<<min1<<" and "<<min2<<" adding "<<add<<"!\n"; min1 %= mod; min2 %= mod; add %= mod; if(answer < min1) answer += mod; answer -= min1; answer %= mod; if(answer < min2) answer += mod; answer -= min2; answer %= mod; answer += add; answer %= mod; } } cout<<answer<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...