MnZn求助
查看原帖
MnZn求助
455490
Sharpsmile楼主2022/3/30 20:59

不知道为啥WA的只有68,思路和绝大多数题解是一样的,

//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <math.h>
#include <algorithm>
#include <istream>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <string.h>
#include <map>
#include <unordered_map>
using namespace std;
#define int long long
const int M=1e7+19;
int t,q,n;
int ttag,ptag;
int a[130],b[130];
struct oper{int loc,val,tp;}op[100300];
unordered_map<int,int>m;
int now;
int sum=0;
int ans;
inline int p(int x){
    if(m.count(x)) return m[x];
    else return now;
}
inline int qp(int a,int x){
    int res=1;
    while(x){
        if(x&1)res=res*a%M;
        a=a*a%M;
        x>>=1;
    }
    return res;
}
inline int inv(int x){return qp(x,M-2);}
signed main(){
    ios::sync_with_stdio(0);
    cin>>n>>q;
    for(int i=1;i<=q;i++){
        cin>>op[i].tp;
        if(op[i].tp==1)cin>>op[i].loc>>op[i].val,op[i].val%=M;
        else if(op[i].tp==2)cin>>op[i].val,op[i].val%=M;
        else if(op[i].tp==3){cin>>op[i].val;
            op[i].val%=M;
            if(!op[i].val)
                op[i].tp=4;
        }
        else if(op[i].tp==4)cin>>op[i].val,op[i].val%=M;
        else if(op[i].tp==5)cin>>op[i].loc;
    }
    cin>>t;
    for(int i=1;i<=t;i++)
        cin>>a[i]>>b[i];
    for(int i=1;i<=t;i++){
        for(int j=1;j<=q;j++){
            int id=(a[i]+j*b[i]%q)%q+1;
            int tp=op[id].tp,loc=op[id].loc,val=op[id].val;
            if(tp==1){
                int tmp=((val-ptag)%M+M)%M*inv(ttag)%M;
                sum+=tmp-p(loc);
                m[loc]=tmp;
                sum%=M;
            }
            else if(tp==2)ptag=(ptag+val)%M;
            else if(tp==3)ttag=ttag*val%M,ptag=ptag*val%M;
            else if(tp==4){
                sum=n*val%M;
                m.clear();
                ttag=1;
                ptag=0;
                now=val;
            }
            else if(tp==5)ans=(ans+p(loc)*ttag%M+ptag)%M;
            else ans=(ans+sum*ttag%M+n*ptag%M)%M;
        }
    }
    cout<<(ans%M+M)%M;
    return 0;
}

2022/3/30 20:59
加载中...