Wrong answer on pretest 3求调
查看原帖
Wrong answer on pretest 3求调
540229
hcx2012楼主2025/7/24 14:56
#include <bits/stdc++.h>
#define int long long
using namespace std;
int p[100010],q[100010];
int mx[100010],mx2[100010];
int idx[100010],idx2[100010];
int m=998244353;
long long qsm(long long a, long long b) {
  a %= m;
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % m;
    a = a * a % m;
    b >>= 1;
  }
  return res;
}
void solve(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>p[i];
    for(int j=0;j<n;j++)cin>>q[j];
    for(int i=0;i<n;i++){
        if(i==0){
            mx[i]=p[i];
            idx[i]=i;
            mx2[i]=q[i];
            idx2[i]=i;
        }else{
            if(mx[i-1]>p[i]){
                mx[i]=mx[i-1];
                idx[i]=idx[i-1];
            }else{
                mx[i]=p[i];
                idx[i]=i;
            }
            if(mx2[i-1]>q[i]){
                mx2[i]=mx2[i-1];
                idx2[i]=idx2[i-1];
            }else{
                mx2[i]=q[i];
                idx2[i]=i;
            }
        }
    }
    for(int i=0;i<n;i++){
        int x1=mx[i],x2=mx2[i];
        if(x1==x2){
            int q2=q[i-idx[i]];int p2=p[i-idx2[i]];
            long long ans1=qsm(2,x1)+qsm(2,q2);
            long long ans2=qsm(2,x2)+qsm(2,p2);
            cout<<max(ans1,ans2)%m<<" ";
            //cout<<ans1<<" "<<ans2<<endl;
        }else{
            if(x1>x2){
                int q2=q[i-idx[i]];
                cout<<(qsm(2,x1)+qsm(2,q2))%m<<" ";
            }else{
                int p2=p[i-idx2[i]];
                cout<<(qsm(2,x2)+qsm(2,p2))%m<<" ";
            }
        }
    }
    cout<<endl;
}
signed main(){
    int T;
    cin>>T;
    while(T--)solve();
    return 0;
}
2025/7/24 14:56
加载中...