Codeforces Global Round 15(A,B)


A. Subsequence Permutation

题目大意:

给你一个字符串,你可以选择其中k个字符,将这k个字符任意置换,使字典序最小,问最小的k

思路: 将字符排序,如果排序后数组与原数组不同的字符都要选择,使其变换为排序后的数组

AC代码:

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int maxn=1e5+3;
int a[maxn];
int b[maxn];
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int n;
		scanf("%d\n",&n);
		char now;
		for(int i=1;i<=n;++i){
			char x;
			scanf("%c",&x);
			a[i]=x-'a'+1;
			b[i]=a[i];
		}
		sort(b+1,b+n+1);
		int sum=0;
		for(int i=1;i<=n;++i){
			if(a[i]!=b[i])sum++;
		}
		printf("%d\n",sum);
	}
}

B. Running for Gold

题目大意:

有n名运动员参加马拉松比赛,编号从1到n,他们在过去都参加过5次重要的马拉松比赛,
如果运动员x在过去至少3次马拉松比赛中排名优于运动员y,则认为运动员x优于运动员y。
如果一名运动员优于所有其他运动员。
找出任何有可能获得金牌的运动员(即优于所有其他运动员的运动员),或确定没有这样的运动员。

思路:

先通过一轮比较,找出一个暂定的最强者,然后再一轮比较看下有没有比他强的人(判断有没有环)

AC代码:

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int maxn=1e5+3;
struct a_node{
	int x ;
	int id;
}a[6][maxn];
bool cmp(a_node a,a_node b){
	return a.x<b.x;
}
int s[maxn];
int p[maxn];
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;++i){
			for(int j=1;j<=5;++j){
				scanf("%d",&a[j][i].x);
				a[j][i].id=i;
				
			}
			s[i]=0;
		}
		int now=1;
		for(int i=1;i<=n;++i){
			int sum=0;
			for(int j=1;j<=5;++j)
                if(a[j][now].x>a[j][i].x)sum++;
            if(sum>=3)now=i;
		}
		int ans=now;
		for(int i=1;i<=n;++i){
			int sum=0;
			for(int j=1;j<=5;++j)
                if(a[j][now].x>a[j][i].x)sum++;
            if(sum>=3)ans=-1;
		}
		printf("%d\n",ans);
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值