Submission #1308979

#TimeUsernameProblemLanguageResultExecution timeMemory
1308979rohit_flytsappAutomobil (COCI17_automobil)C++20
0 / 100
27 ms31732 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<<"\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];

    //         cout<<"Accounting cell: "<<cell<<" 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...