蕲春县住房和城乡建设局网站,溧水做网站价格,如何做一个微笑公众号推文,南京驰铭做网站公司这一次网络赛我们过8题#xff0c;排名71#xff0c;算是发挥的非常好的了。这一把我们三个人手感都很好#xff0c;前六题都是一遍过#xff0c;然后我又切掉了非签到的E和C#xff0c;最后时间不是很多#xff0c;K只想到大概字典树的思路#xff0c;细节不是很懂就直…这一次网络赛我们过8题排名71算是发挥的非常好的了。这一把我们三个人手感都很好前六题都是一遍过然后我又切掉了非签到的E和C最后时间不是很多K只想到大概字典树的思路细节不是很懂就直接开冲当然是没有冲出来。
C 感觉思路挺容易的但是我想了很久如果我能秒掉这种题当然我觉得实力不够秒掉这种题有可能可以再把K开出来。
首先我们肯定是要维护当前有哪些后缀能和前缀匹配的。 我们想了很多错误的思路以后才开始思考kmp然后就想到了可以一直跳kmp只需要把相同的合并起来如果能匹配的就全部一起跳过不匹配的就直接删掉时间复杂度O(n)。
#includebits/stdc.h
#define rep(i,x,y) for(int ix;iy;i)
#define dwn(i,x,y) for(int ix;iy;i--)
#define ll long long
#define ull unsigned long long
using namespace std;
templatetypename Tinline void qr(T x){x0;int f0;char sgetchar();while(!isdigit(s))f|s-,sgetchar();while(isdigit(s))xx*10s-48,sgetchar();xf?-x:x;
}
int cc0,buf[31];
templatetypename Tinline void qw(T x){if(x0)putchar(-),x-x;do{buf[cc]int(x%10);x/10;}while(x);while(cc)putchar(buf[cc--]0);
}
const int N3e510;
int n;ll ans,a[N],b[N],c[N];
int f[N],g[N];
void solve(){qr(n); ll tot0;rep(i,1,n){qr(c[i]),qr(a[i]),qr(b[i]);c[i](c[i]ans)%n;if(i1)totb[i];else{if(c[1]c[i])totb[i];int jf[i-1];if(c[i]c[j1])g[i-1]g[j];else g[i-1]f[i-1];while(j){if(c[j1]!c[i]){tot-b[i-j];jf[j];}else break;}if(c[j1]c[i])f[i]j1;else f[i]j;while(j){if(c[j1]c[i])jg[j];else{tot-b[i-j];jf[j];}}}anstot*a[i];qw(ans);puts();}
}
int main(){int tt;tt1;while(tt--)solve();return 0;
}K 看上去要求某种匹配数的个数有点吓人。 不过看到异或就知道这个异或肯定不是白给你的大概就是用字典树一开始我以为是把两个数组分开建字典树后面发现要一起建然后就想到用dp来维护。不过我的dp始终是4维的优化不到三维后面上网看了一下发现全部都是四维那我就直接交了。
#includebits/stdc.h
#define rep(i,x,y) for(int ix;iy;i)
#define dwn(i,x,y) for(int ix;iy;i--)
#define ll long long
#define ull unsigned long long
using namespace std;
templatetypename Tinline void qr(T x){x0;int f0;char sgetchar();while(!isdigit(s))f|s-,sgetchar();while(isdigit(s))xx*10s-48,sgetchar();xf?-x:x;
}
int cc0,buf[31];
templatetypename Tinline void qw(T x){if(x0)putchar(-),x-x;do{buf[cc]int(x%10);x/10;}while(x);while(cc)putchar(buf[cc--]0);
}
const int N210;
const int mod998244353;
struct node{int f[N];node(){memset(f,0,sizeof(f));}void print(){rep(i,0,10)coutf[i] ;coutendl;}
};
int n;ll k;
ll a[N],b[N],c[N];
int fc[N],ifc[N];
int power(int a,int b){int ret1;while(b){if(b1)ret1ll*ret*a%mod;a1ll*a*a%mod;b1;}return ret;
}
int C(int x,int y){if(x0||y0||xy)return 0;return 1ll*fc[x]*ifc[y]%mod*ifc[x-y]%mod;
}
int A(int x,int y){if(x0||y0||xy)return 0;return 1ll*fc[x]*ifc[x-y]%mod;
}
node solve(int ki,int l,int r,int x,int y){if(lr||xy){node now;now.f[0]1;return now;}if(ki-1){node now;int tmin(r1-l,y1-x);rep(i,0,t)now.f[i]1ll*C(r-l1,i)*A(y-x1,i)%mod;return now;}//sortint mid1l-1,mid2x-1;rep(i,l,r){if(a[i]ki1)break;mid1i;}rep(i,x,y){if(b[i]ki1)break;mid2i;}if(kki1){node ans1solve(ki-1,l,mid1,mid21,y);node ans2solve(ki-1,mid11,r,x,mid2);node ans;int siz1min(mid11-l,y-mid2);int siz2min(r-mid1,mid21-x);rep(i,0,siz1)rep(j,0,siz2)(ans.f[ij]1ll*ans1.f[i]*ans2.f[j]%mod)%mod;return ans;}else{node ans1solve(ki-1,l,mid1,x,mid2);node ans2solve(ki-1,mid11,r,mid21,y);node ans;int siz1min(mid11-l,mid21-x);int siz2min(r-mid1,y-mid2);rep(i,0,siz1){int x1mid11-l-i,y1mid21-x-i;rep(j,0,siz2){int x2r-mid1-j,y2y-mid2-j;int t1min(x1,y2);int t2min(x2,y1);rep(p1,0,t1){rep(p2,0,t2){(ans.f[ijp1p2]1ll*ans1.f[i]*ans2.f[j]%mod*C(x1,p1)%mod*A(y2,p1)%mod*C(x2,p2)%mod*A(y1,p2)%mod)%mod;}}}}return ans;}
}
void solve(){qr(n),qr(k);rep(i,1,n)qr(a[i]);rep(i,1,n)qr(b[i]);sort(a1,an1);sort(b1,bn1);node anssolve(61,1,n,1,n);rep(i,1,n)qw(ans.f[i]),puts();
}
int main(){fc[0]1;rep(i,1,200)fc[i]1ll*fc[i-1]*i%mod;ifc[200]power(fc[200],mod-2);dwn(i,199,0)ifc[i]1ll*ifc[i1]*(i1)%mod;int tt;tt1;while(tt--)solve();return 0;
}