CodeForces - 864

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lidengdengter/article/details/89863727

Fair Game CodeForces - 864A

A、B两人各抽取n张牌中不同的两张AA和BB,然后两人拿取剩余的和其先前抽取的一样的牌,每位牌手获得的牌数是相同的,当他们可以拿下所有n张牌,那么这场比赛被认为是公平的。问牌面是否可构成公平比赛。直接记录几种牌数判断即可。

#include<cstdio>
#include<map>
#include<algorithm>
#include<cstring>
using namespace std;
int p[105],v[105],ans[105];
bool vis[105];

int main(){
	int n,x;
	while(~scanf("%d",&n)){
		memset(v,0,sizeof(v));
		memset(vis,false,sizeof(vis));
		int len=0;
		for(int i=0;i<n;i++){
			scanf("%d",&p[i]);
			if(!vis[p[i]]){
				ans[len++]=p[i];
				vis[p[i]]=true;
			}
			v[p[i]]++;
		}
		
		if(len==1||len>2){
			printf("NO\n");
			continue;
		}
		if(v[ans[0]]!=v[ans[1]]){
			printf("NO\n");
			continue;
		}
		printf("YES\n");
		printf("%d %d\n",ans[0],ans[1]);
	}
	return 0;
} 

Polycarp and Letters CodeForces - 864B

一组连续小写字母组成的字串的最大元素数。用集合收集连续字串判断。

#include<cstdio>
#include<set>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=205;
char s[N];
set<int>v;

int main(){
	int n;
	while(~scanf("%d",&n)){
		scanf("%s",s);
		int ans=0;
		for(int i=0;i<n;i++){
			if(s[i]>='A'&&s[i]<='Z'){
				ans=max(ans,(int)v.size());
				v.clear();
			}
			else
				v.insert(s[i]);
		}
		ans=max(ans,(int)v.size());
		printf("%d\n",ans);
	}
	return 0;
}

Bus CodeForces - 864C

车从x=0位置到x=a位置间来回移动,x=f处可加油,车邮箱容量为b,求k次移动(单方向)需要加几次油。以加油站x=f处为节点,判断路程每次油量是否可到达加油站。

#include<cstdio>
const int N=1e4+5;
int dis[N];

int main(){
	int a,b,f,k;
	while(~scanf("%d%d%d%d",&a,&b,&f,&k)){
		int p1=f*2,p2=(a-f)*2;
		dis[1]=f;
		
		if(k&1){  //no back
			dis[k+1]=a-f;
			int tmp=1;
			for(int i=2;i<=k;i++){
				if(tmp==1) dis[i]=p2;
				else dis[i]=p1;
				
				tmp=-tmp;
			}		
		}
		else{
			dis[k+1]=f;
			int tmp=1;
			for(int i=2;i<=k;i++){
				if(tmp==1) dis[i]=p2;
				else dis[i]=p1;
				
				tmp=-tmp;
			}
		}
		
		int cnt=0;
		int f=0,tmp=0;
		for(int i=1;i<=k+1;i++){
			if(dis[i]>b){
				f=1;break;
			}
			if(tmp+dis[i]<=b)
				tmp+=dis[i];
			else{
				tmp=dis[i];
				cnt++;
			}			
		}
		
		if(f)
			printf("-1\n");
		else
			printf("%d\n",cnt);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lidengdengter/article/details/89863727