#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N=2e6+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; //我们不难发现,此题最难的地方在于操作2 //那么我们如何处理:队列刚好可以处理开头 //那么我们如何处理这么大的10的i次方呢,qmi之后%mod就可以了 int qmi(int a,int k,int mod) { int res=1; while(k) { if(k&1)res=res*a%mod; k>>=1; a=a*a%mod; } return res; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; int ans=1; queue<int>q;q.push(1); for(int i=1;i<=n;i++) { int t;cin>>t; if(t==1) { int x; cin>>x; ans=(ans*10+x)%mod; q.push(x); } else if(t==2) { int k=q.front();q.pop(); ans=(ans-k*qmi(10,q.size(),mod)%mod+mod)%mod; } else { cout<<ans<<endl; } } return 0; }
[ABC298D] Writing a Numeral--queue
最新推荐文章于 2024-05-22 00:03:53 发布