A&B&C 1000+1200+1400
水
D 1700
每次看结尾的一连串B
长度为1就操作1,否则操作2
for(int i=1;i<=n;i++){
if(s[i]!=s[i-1])
p[++m][0]=(s[i]-'A');
p[m][1]++;
}
for(int i=m;i>=1;i--){
if(p[i][0]==l){
res++;
if(p[i][1]>1) l=1-l;
}
}
E 1800
x,y,z坐标排序,相邻两个之间连边,Kruskal
sort(x+1,x+1+n,cmp);sort(y+1,y+1+n,cmp);sort(z+1,z+1+n,cmp);
for(int i=2;i<=n;i++){
c[++m].l=x[i].k-x[i-1].k;
c[m].a=x[i].id;c[m].b=x[i-1].id;
}
for(int i=2;i<=n;i++){
c[++m].l=y[i].k-y[i-1].k;
c[m].a=y[i].id;c[m].b=y[i-1].id;
}
for(int i=2;i<=n;i++){
c[++m].l=z[i].k-z[i-1].k;
c[m].a=z[i].id;c[m].b=z[i-1].id;
}
sort(c+1,c+1+m,cm2);
for(int i=1;i<=m;i++){
int p=c[i].a,q=c[i].b;
if(find(p)==find(q)) continue;
merge(p,q);ans+=c[i].l;
}
F 1760->2200
80pts:暴力DP
100pts:
for(int i=1;i<=n;i++){
mx=0;
for(int j=n;j>=1;j--){
if(h[i]==h[j]){f[j]=max(f[j],mx+1+(i!=j));}
else if(h[i]>h[j]){mx=max(mx,f[j]);}
}
res=max(res,f[i]);
}
G&H 0+450
下午去打CSP-1模拟了,J69(rk 160+,前7%),S54(rk 240+,前16%)