Codeforces Round #568 (Div. 2)

123 篇文章 0 订阅
122 篇文章 0 订阅

老年选手水平退化严重,花样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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值