#include<iostream>#define int long longusingnamespacestd;constintN=5e5+10;constintMOD=1032992941;structEdge{intv,next;}pool[2*N];intne=1,head[N];voidaddEdge(intu,intv){pool[++ne]={v,head[u]};head[u]=ne;}structmyPair{intval,cnt;inlinemyPair():val(N),cnt(1){}inlinemyPair(int_v,int_c):val(_v),cnt(_c){}inlinemyPairoperator+(intx){return(myPair){val+x,cnt};}inlinemyPairoperator+(constmyPair&b)const{return{val+b.val,cnt*b.cnt%MOD};}};inlinemyPairmin(constmyPair&a,constmyPair&b){myPairres(min(a.val,b.val),0);if(a.val==res.val)res.cnt=a.cnt;if(b.val==res.val)res.cnt=(res.cnt+b.cnt)%MOD;returnres;}intn;myPairf[N][3];voiddfs(intu,intfa){f[u][0].val=0;f[u][1].val=N;f[u][2].val=1;for(inte=head[u];e;e=pool[e].next){intv=pool[e].v;if(v==fa)continue;dfs(v,u);f[u][1]=min(f[u][0]+f[v][2],f[u][1]+min(f[v][1],f[v][2]));f[u][0]=f[u][0]+f[v][1];f[u][2]=f[u][2]+min(min(f[v][0],f[v][1]),f[v][2]);}}signedmain(){cin>>n;for(inti=1;i<=n-1;i++){intu,v;cin>>u>>v;addEdge(u,v);addEdge(v,u);}dfs(1,0);myPairres=min(f[1][1],f[1][2]);cout<<res.val<<'\n'<<res.cnt<<'\n';return0;}
#include<iostream>#include<cassert>#define ll long longusingnamespacestd;constintN=1e5+10;constintK=110;constintMOD=1e9+7;#define add(a, b) a = (a + b) % MOD;structEdge{intv,next;}pool[2*N];intne,head[N];voidaddEdge(intu,intv){pool[++ne]={v,head[u]};head[u]=ne;}intn,k;intsz[N];intf[N][K][2][2],g[K][2][2];voiddfs(intu,intfa){f[u][0][0][0]=1;f[u][1][1][0]=1;sz[u]=1;for(inte=head[u];e;e=pool[e].next){intv=pool[e].v;if(v==fa)continue;dfs(v,u);for(inti=0;i<=min(k,sz[u]+sz[v]);i++)g[i][0][0]=g[i][0][1]=g[i][1][0]=g[i][1][1]=0;for(inti=0;i<=min(k,sz[u]);i++){for(intj=0;j<=min(k-i,sz[v]);j++){add(g[i+j][0][0],(ll)f[u][i][0][0]*f[v][j][0][1]%MOD);add(g[i+j][0][1],(ll)f[u][i][0][1]*(f[v][j][1][1]+f[v][j][0][1])%MOD);add(g[i+j][0][1],(ll)f[u][i][0][0]*f[v][j][1][1]%MOD);add(g[i+j][1][0],(ll)f[u][i][1][0]*(f[v][j][0][0]+f[v][j][0][1])%MOD);add(g[i+j][1][1],(ll)f[u][i][1][1]*(((ll)f[v][j][0][0]+f[v][j][0][1]+f[v][j][1][0]+f[v][j][1][1])%MOD)%MOD);add(g[i+j][1][1],(ll)f[u][i][1][0]*(f[v][j][1][0]+f[v][j][1][1])%MOD);}}sz[u]+=sz[v];for(inti=0;i<=min(k,sz[u]);i++){f[u][i][0][0]=g[i][0][0];f[u][i][0][1]=g[i][0][1];f[u][i][1][0]=g[i][1][0];f[u][i][1][1]=g[i][1][1];}}}signedmain(){cin>>n>>k;for(inti=1;i<=n-1;i++){intu,v;cin>>u>>v;addEdge(u,v);addEdge(v,u);}dfs(1,0);cout<<(f[1][k][0][1]+f[1][k][1][1])%MOD<<'\n';return0;}
#include<iostream>#define int long longusingnamespacestd;constintN=2e5+10;constintMOD=998244353;inlinevoidadd(int&a,intb){a=(a+b)%MOD;}intn,m;inta[N],b[N];intf[N],g[N];intans;intfact[N],ifact[N],inv[N];inlineintc(inta,intb){returnfact[a]*ifact[a-b]%MOD*ifact[b]%MOD;}signedmain(){fact[0]=ifact[0]=inv[1]=1;for(inti=2;i<N;i++)inv[i]=MOD-inv[MOD%i]*(MOD/i)%MOD;for(inti=1;i<N;i++)fact[i]=fact[i-1]*i%MOD;for(inti=1;i<N;i++)ifact[i]=ifact[i-1]*inv[i]%MOD;cin>>n>>m;for(inti=1;i<=n;i++){charc;cin>>c;a[c-'A']++;}for(inti=1;i<=m;i++){charc;cin>>c;b[c-'A']++;}for(inti=0;i<=min(a[0],b[0]);i++)f[i]=c(a[0],i);for(inti=1;i<26;i++){for(intj=1;j<=a[i-1]&&j<=b[i-1];j++)add(f[j],f[j-1]);intsum=f[min(a[i-1],b[i-1])];for(intj=0;j<=a[i]&&j<=b[i];j++)g[j]=0;for(intj=0;j<=a[i]&&j<=b[i];j++){if(a[i-1]-b[i]+j>b[i-1])break;if(a[i-1]-b[i]+j>0)add(g[j],sum-f[a[i-1]-b[i]+j-1]+MOD);elseadd(g[j],sum);g[j]=g[j]*c(a[i],j)%MOD;}for(intj=0;j<=a[i]&&j<=b[i];j++){f[j]=g[j];}}ans=f[a[25]];ans=ans*fact[n]%MOD;for(inti=0;i<26;i++)ans=ans*ifact[a[i]]%MOD;cout<<ans<<'\n';return0;}
#include<iostream>#include<algorithm>#define ll long longusingnamespacestd;constintN=2e5+10;constintMOD=998244353;inlinevoidadd(int&a,intb){a=(a+b)%MOD;}inlinevoidmul(int&a,intb){a=(ll)a*b%MOD;}intn;inta[N];intnum[N],nn;voidlisanhua(){for(inti=1;i<=n;i++)num[++nn]=a[i];num[++nn]=0;sort(num+1,num+1+nn);nn=unique(num+1,num+1+nn)-(num+1);for(inti=1;i<=n;i++)a[i]=lower_bound(num+1,num+1+nn,a[i])-num;}namespaceSegT{intsum[4*N],tag_mul[4*N],tag_add[4*N];intlen[4*N];inlineintlc(intx){returnx<<1;}inlineintrc(intx){returnx<<1|1;}inlinevoidmove_tag_mul(intp,inttg){mul(tag_mul[p],tg);mul(tag_add[p],tg);mul(sum[p],tg);}inlinevoidmove_tag_add(intp,inttg){add(tag_add[p],tg);add(sum[p],(ll)tg*len[p]%MOD);}inlinevoidpush_down(intp){if(tag_mul[p]!=1){move_tag_mul(lc(p),tag_mul[p]);move_tag_mul(rc(p),tag_mul[p]);tag_mul[p]=1;}if(tag_add[p]){move_tag_add(lc(p),tag_add[p]);move_tag_add(rc(p),tag_add[p]);tag_add[p]=0;}}voidbuild(intp,intl,intr){tag_mul[p]=1;if(l==r){len[p]=num[l]-num[l-1];return;}intmid=(l+r)>>1;build(lc(p),l,mid);build(rc(p),mid+1,r);len[p]=len[lc(p)]+len[rc(p)];}voidadd(intp,intl,intr,intq,intv){if(r<=q){move_tag_add(p,v);return;}push_down(p);intmid=(l+r)>>1;add(lc(p),l,mid,q,v);if(q>mid)add(rc(p),mid+1,r,q,v);sum[p]=(sum[lc(p)]+sum[rc(p)])%MOD;}voidmul(intp,intl,intr,intql,intqr,intv){if(ql<=l&&r<=qr){move_tag_mul(p,v);return;}push_down(p);intmid=(l+r)>>1;if(ql<=mid)mul(lc(p),l,mid,ql,qr,v);if(mid<qr)mul(rc(p),mid+1,r,ql,qr,v);sum[p]=(sum[lc(p)]+sum[rc(p)])%MOD;}}intmain(){cin>>n;for(inti=1;i<=n;i++)cin>>a[i];lisanhua();SegT::build(1,1,nn);intpreans=1;for(inti=1;i<=n;i++){SegT::mul(1,1,nn,1,nn,MOD-1);SegT::add(1,1,nn,a[i],preans);if(a[i]<nn)SegT::mul(1,1,nn,a[i]+1,nn,0);preans=SegT::sum[1];}cout<<preans<<'\n';return0;}
#include<iostream>#include<algorithm>#include<unistd.h>#define ll long longusingnamespacestd;constintN=2e5+10;constintV=2e9+10;constintLOGV=34;structmyPair{intl,r,id;inlinemyPair():l(0),r(0),id(0){}};intn,nq;intans[N];myPaira[N];myPairq[N];namespaceSegT{constintMAXN=2*N*LOGV;intans[MAXN],chd[MAXN][2];intnn,rt;voidassign(int&p,intl,intr,intql,intqr){if(!p)p=++nn;elseif(!ans[p])return;if(ql<=l&&r<=qr){ans[p]=0;return;}intmid=((ll)l+r)>>1;if(ql<=mid)assign(chd[p][0],l,mid,ql,qr);if(mid<qr)assign(chd[p][1],mid+1,r,ql,qr);ans[p]=chd[p][0]?ans[chd[p][0]]:mid-l+1;ans[p]+=chd[p][1]?ans[chd[p][1]]:r-mid;}intquery(intp,intl,intr,intql,intqr){if(!p)returnmin(qr,r)-max(ql,l)+1;if(!ans[p])return0;if(ql<=l&&r<=qr)returnans[p];intmid=((ll)l+r)>>1,res=0;if(ql<=mid)res+=query(chd[p][0],l,mid,ql,qr);if(mid<qr)res+=query(chd[p][1],mid+1,r,ql,qr);returnres;}}intmain(){cin>>n;for(inti=1;i<=n;i++){intp,l;cin>>p>>l;a[i].l=p,a[i].r=p+l-1;}cin>>nq;for(inti=1;i<=nq;i++){cin>>q[i].l>>q[i].r;q[i].id=i;}sort(q+1,q+1+nq,[](constmyPair&a,constmyPair&b){returna.l>b.l;});for(inti=n,j=1;i>=1;i--){SegT::assign(SegT::rt,1,V,a[i].l,a[i].r);while(j<=nq&&q[j].l==i){ans[q[j].id]=SegT::query(SegT::rt,1,V,a[q[j].l].l,a[q[j].r].l);++j;}}for(inti=1;i<=nq;i++)cout<<ans[i]<<'\n';return0;}
#include<iostream>#define int long longusingnamespacestd;constintN=3e5+10;constintINF=0x3f3f3f3f3f3f3f3f;intT;intn,k;inta[N];inthot[N],cold[N];namespaceSegT{intmn[4*N],tag[4*N];inlineintlc(intx){returnx<<1;}inlineintrc(intx){returnx<<1|1;}inlinevoidpush_up(intp){mn[p]=min(mn[lc(p)],mn[rc(p)]);}inlinevoidmove_tag(intp,inttg){mn[p]+=tg;tag[p]+=tg;}inlinevoidpush_down(intp){if(!tag[p])return;move_tag(lc(p),tag[p]);move_tag(rc(p),tag[p]);tag[p]=0;}voidclear(intp,intl,intr){tag[p]=0;mn[p]=INF;if(l==r)return;intmid=(l+r)>>1;clear(lc(p),l,mid);clear(rc(p),mid+1,r);}intquery(intp,intl,intr,intql,intqr){if(ql<=l&&r<=qr)returnmn[p];intmid=(l+r)>>1;push_down(p);returnmin(ql<=mid?query(lc(p),l,mid,ql,qr):INF,mid<qr?query(rc(p),mid+1,r,ql,qr):INF);}voidgmin(intp,intl,intr,intq,intv){if(l==r){mn[p]=min(mn[p],v);return;}intmid=(l+r)>>1;push_down(p);if(q<=mid)gmin(lc(p),l,mid,q,v);elsegmin(rc(p),mid+1,r,q,v);push_up(p);}inlinevoidclear(){clear(1,0,k);}inlinevoidgmin(intp,intv){gmin(1,0,k,p,v);}inlineintquery(intl,intr){returnl<=r?query(1,0,k,l,r):INF;}inlinevoidadd(intv){move_tag(1,v);}}signedmain(){ios::sync_with_stdio(0);cin.tie(0);cin>>T;while(T--){cin>>n>>k;for(inti=1;i<=n;i++)cin>>a[i];for(inti=1;i<=k;i++)cin>>cold[i];for(inti=1;i<=k;i++)cin>>hot[i];SegT::clear();SegT::gmin(0,0);for(inti=1;i<=n;i++){intc=a[i];inttmp=min(SegT::query(c,c)+hot[c],min(SegT::query(0,c-1),SegT::query(c+1,k))+cold[c]);if(a[i-1]==c){SegT::add(hot[c]);}else{SegT::add(cold[c]);}SegT::gmin(a[i-1],tmp);}cout<<SegT::query(0,k)<<'\n';}return0;}
#include<iostream>#define int long longusingnamespacestd;constintN=2010;constintMOD=1e9+7;#define add(a, b) a = (a + b) % MOD;intn,m;chars[N];intf[N][N][2],g[N];signedmain(){cin>>n>>m;cin>>(s+1);f[n+1][0][1]=1;for(intj=n+1;j>=1;j--){if(j<=n)for(intk=0;k<=m;k++){if(k>=n-j+1)add(f[j][k][0],g[k-(n-j+1)]);add(f[j][k][1],g[k]);f[j][k][0]=f[j][k][0]*('z'-s[j])%MOD;f[j][k][1]=f[j][k][1]*(s[j]-'a')%MOD;}for(intk=0;k<=m;k++)add(g[k],f[j][k][1]);for(intk=0;k<=m;k++){inttmp=n-j+1;for(inti=j-1;(j-i-1)*tmp+(n-i+1)<=k&&i>=0;i--){add(f[i][k][0],f[j][k-(j-i-1)*tmp-(n-i+1)][0]);}for(inti=j-1;(j-i-1)*tmp<=k&&i>=0;i--){add(f[i][k][1],f[j][k-(j-i-1)*tmp][0]);}}}cout<<(f[0][m][1]+g[m])%MOD<<'\n';return0;}
#include<iostream>#define int long longusingnamespacestd;constintN=5010;constintMOD=1e9+7;intT,n;intp[N];intf[N][N];intinv(inta){intb=MOD-2,res=1;while(b){if(b&1)res=res*a%MOD;a=a*a%MOD;b>>=1;}returnres;}signedmain(){cin>>T;while(T--){cin>>n;for(inti=1;i<=n;i++){intx,y;cin>>x>>y;p[i]=x*inv(y)%MOD;}for(inti=0;i<=n;i++)cin>>f[0][i];for(inti=1;i<=n;i++){for(intj=0;j<=n;j++){f[i][j]=(p[i]*f[i-1][j+1]+(MOD+1-p[i])*f[i-1][max(0ll,j-1)])%MOD;}}for(inti=1;i<=n;i++)cout<<f[i][0]<<' ';cout<<'\n';}return0;}