老年选手水平退化严重,花样WA题。
A.Ropewalkers
贪心
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 500010
int main(){
// freopen("a.in","r",stdin);
int a[3],d;scanf("%d%d%d%d",&a[0],&a[1],&a[2],&d);
sort(a,a+3);int x=a[1]-d,y=a[1]+d,ans=0;
if(x<a[0]) ans+=a[0]-x;if(y>a[2]) ans+=y-a[2];
printf("%d\n",ans);
return 0;
}
B. Email from Polycarp
模拟
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 1000010
int tst,n,m;
char s[N],t[N];
inline bool jud(){
int cnt0,cnt1,curs=1,curt=1;
while(curs<=n){
cnt0=1;while(s[curs]==s[curs+1]) ++curs,++cnt0;
cnt1=0;while(t[curt]==s[curs]) ++curt,++cnt1;
if(cnt0>cnt1) return 0;++curs;
}return curt>m?1:0;
}
int main(){
// freopen("a.in","r",stdin);
scanf("%d",&tst);
while(tst--){
scanf("%s%s",s+1,t+1);n=strlen(s+1);m=strlen(t+1);s[n+1]='.';t[m+1]='#';
puts(jud()?"YES":"NO");
}return 0;
}
C.Exam in BerSU (hard version)
线段树+贪心
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 200010
int n,m,sum=0,ans=0;
struct node{
int sum,cnt;
}tr[500];
inline void change(int p,int l,int r,int x){
tr[p].cnt++;tr[p].sum+=x;
if(l==r) return;int mid=l+r>>1;
if(x<=mid) change(p<<1,l,mid,x);
else change(p<<1|1,mid+1,r,x);
}
inline int ask(int p,int l,int r,int x){
if(l==r){return min(tr[p].cnt,x/l);}
if(tr[p].sum<=x) return tr[p].cnt;int mid=l+r>>1;
if(x<=tr[p<<1].sum) return ask(p<<1,l,mid,x);
return tr[p<<1].cnt+ask(p<<1|1,mid+1,r,x-tr[p<<1].sum);
}
int main(){
// freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
int x;scanf("%d",&x);
printf("%d%c",i-1-ask(1,1,100,m-x),i==n?'\n':' ');
change(1,1,100,x);
}return 0;
}
D.Extra Element
模拟
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 200010
int n;
struct node{
int val,id;
}a[N];
inline bool cmp(node a,node b){return a.val<b.val;}
inline bool jud(int l,int r,int d){
for(int i=l+1;i<=r;++i) if(a[i].val-a[i-1].val!=d) return 0;return 1;
}
int main(){
// freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i){scanf("%d",&a[i].val);a[i].id=i;}sort(a+1,a+n+1,cmp);
if(jud(2,n,a[3].val-a[2].val)){printf("%d\n",a[1].id);return 0;}int x=a[2].val;a[2].val=a[1].val;
if(jud(2,n,a[3].val-a[2].val)){printf("%d\n",a[2].id);return 0;}a[2].val=x;int d=a[2].val-a[1].val;
for(int i=3;i<=n;++i){
if(a[i].val-a[i-1].val!=d){
a[i].val=a[i-1].val;
if(jud(i,n,d)) printf("%d\n",a[i].id);
else puts("-1");return 0;
}
}return 0;
}
E.Polycarp and snakes
模拟+set
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define N 2010
int tst,n,m;
char s[N][N],t[N][N];
set<int>ax[26];
set<int>ay[26];
struct node{
int r1,c1,r2,c2;
}ans[27];
inline void work(int id,int r1,int c1,int r2,int c2){
ans[id].r1=r1;ans[id].r2=r2;ans[id].c1=c1;ans[id].c2=c2;
for(int i=r1;i<=r2;++i)
for(int j=c1;j<=c2;++j) t[i][j]=id+'a';
}
inline bool check(){
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(t[i][j]!=s[i][j]) return 0;return 1;
}
int main(){
// freopen("a.in","r",stdin);
scanf("%d",&tst);
while(tst--){
scanf("%d%d",&n,&m);int mx=-1,cur=0;bool flag=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j) t[i][j]='.';
for(int i=1;i<=n;++i){
scanf("%s",s[i]+1);
for(int j=1;j<=m;++j){
if(s[i][j]=='.') continue;mx=max(mx,s[i][j]-'a');
ax[s[i][j]-'a'].insert(i);
ay[s[i][j]-'a'].insert(j);
}
}for(int i=0;i<=mx;++i){
if(!ax[i].size()) continue;int r1,c1,r2,c2;
if(ax[i].size()==1){
r1=*ax[i].begin(),r2=*ax[i].begin();
c1=*ay[i].begin(),c2=*ay[i].rbegin();
}else if(ay[i].size()==1){
r1=*ax[i].begin(),r2=*ax[i].rbegin();
c1=*ay[i].begin(),c2=*ay[i].begin();
}else{puts("NO");flag=1;break;}
while(cur<=i) work(cur,r1,c1,r2,c2),++cur;
}if(!flag){
if(check()){
puts("YES");printf("%d\n",mx+1);
for(int i=0;i<=mx;++i) printf("%d %d %d %d\n",ans[i].r1,ans[i].c1,ans[i].r2,ans[i].c2);
}else puts("NO");
}for(int i=0;i<=mx;++i) ax[i].clear(),ay[i].clear();
}return 0;
}