版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lidengdengter/article/details/89863727
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;
}
车从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;
}