Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
32447 LYLAKIOIAKIOI 【S】T3 C++ 解答错误 5 324 MS 41496 KB 2324 2024-09-08 17:50:47

Tests(1/20):


#include<bits/stdc++.h> #define Rf(i,a,b) for(int i=(a);i<=(b);i++) #define Rb(i,a,b) for(int i=(a);i>=(b);i--) #define jp8 push_back #define ll long long #define Rfll(i,a,b) for(ll i=(a);i<=(b);i++) #define PII pair<int,int> #define mpx make_pair using namespace std; const int N=1e6+10; int mod=998244353; int qp(int a,int b){ int x=1; while(b){ if(b&1) x=1ll*a*x%mod; b>>=1;a=1ll*a*a%mod; }return x; } int a[N];int n,m;bool vis[N]; vector<int> e[N],s; int fac[N];int inv[N];int sumfac[N]; bool is_in[N]; int C(int up,int down){ return 1ll*fac[down]*inv[up]%mod*inv[down-up]%mod; }int A(int up,int down){ return 1ll*fac[down]*inv[down-up]%mod; }ll cnt[N]; void plu(int st,int k,int d,int len){ cnt[st]+=k; cnt[st+1]+=d-k; cnt[st+len]+=-len*d-k; cnt[st+len+1]+=(len-1)*d+k; }map<int,int> q; int LEN[N],tp=0; void slv(){ cin>>n>>m; Rf(i,1,n) is_in[i]=0,cnt[i]=0;q.clear(); int ans=0; tp=0;int la=0; Rf(i,1,m){ int x;cin>>x;is_in[x]=1; LEN[++tp]=x-la-1;la=x; }LEN[++tp]=n-la; Rf(i,1,tp){ if(LEN[i]>1) plu(2,LEN[i]-1,-1,LEN[i]-1); //Rf(j,1,n) cout<<cnt[j]<<' ';cout<<endl; }Rf(i,1,tp-1){ int c1=LEN[i]+1,c2=LEN[i+1]+1; if(c1>c2) swap(c1,c2); if(c1>1){ plu(1,1,1,c1-1);plu(c2+1,c1-1,-1,c1-1); plu(1,-1,0,1); }plu(c1,c1,0,c2-c1+1); //Rf(j,1,n) cout<<cnt[j]<<' ';cout<<endl; if(c1==1) plu(1,-1,0,1); //Rf(j,1,n) cout<<cnt[j]<<' ';cout<<endl; } Rf(i,3,tp){ q[LEN[i-2]+1]++; for(auto ed:q){ int c1=ed.first,c2=LEN[i]+1; if(c1>c2) swap(c1,c2); plu(1,0,ed.second,c1);plu(c2+2,(c1-1)*ed.second,-ed.second,c1); plu(c1+1,c1*ed.second,0,c2-c1+1); } }Rf(i,1,n+1) cnt[i]+=cnt[i-1];Rf(i,1,n+1) cnt[i]+=cnt[i-1]; //Rf(i,1,n) cout<<cnt[i]<<' '; Rf(i,2,n) ans=(ans+cnt[i]%mod*fac[n+1]*inv[i+1]%mod)%mod; cout<<ans%mod<<endl; } int main(){ int lim=1000005;fac[0]=1;Rf(i,1,lim) fac[i]=1ll*fac[i-1]*i%mod; inv[lim]=qp(fac[lim],mod-2);Rb(i,lim-1,0) inv[i]=1ll*inv[i+1]*(i+1)%mod; Rf(i,1,lim) inv[i]=inv[i]*fac[i-1]; int t;cin>>t;while(t--) slv(); return 0; }


测评信息: