P15522 [CCC 2016 J5/S2] Tandem Bicycle
题目描述
自古以来,Dmojistan 和 Pegland 的公民便纷争不断。如今,他们终于签署了停战协议,并决定通过参加双人自行车骑行来庆祝这一和解。两国各有 $N$ 名公民,需将他们两两配对,每组必须包含一名 Dmojistan 公民和一名 Pegland 公民。
每位公民都有各自的骑行速度。每组中,速度较快者操作双人自行车,较慢者只需享受骑行。换言之,若一组两人的速度分别为 $a$ 和 $b$,则该组的自行车速度为 $\max{a,b}$(即两者中的较大值)。总速度为 $N$ 个组各自自行车速度的总和。
对于本题,每个测试点会要求你回答以下两个问题之一:
-
问题 $1$:在所有可能的配对方式中,总速度的最小值是多少?
-
问题 $2$:在所有可能的配对方式中,总速度的最大值是多少?
输入格式
输入共有四行。
第一行包含一个整数,表示你要解决的问题类型,该类型为 $1$ 或 $2$。
第二行包含一个正整数 $N(1 \leq N \leq 100)$。
第三行包含 $N$ 个以空格分隔的整数:表示 Dmojistan 公民的骑行速度。
第四行包含 $N$ 个空格分隔的整数:表示 Pegland 公民的骑行速度。
每个人的速度均为整数。若设某位公民的速度为 $v$,保证任意的 $v$ 满足 $1 \le v \le 10^6$。
本题共 $15$ 分。其中 $8$ 分的问题类型为 $1$,$7$ 分的问题类型为 $2$。
输出格式
输出一行表示问题的答案。
分析:这道题适合新手写
直接来看,有两种情况,
1.问题1,求最小值,直接sort排序,从1到n取最大值相加得出答案
2.问题2,求最大值,注意这里要a数组正序,b数组倒序,这样可以将a数组的最大值和b数组的最大值都取到。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[105],b[105];
int cmp(int a,int b){
return a>b;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
int h,n,ans;
cin>>h>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
if(h==1){
sort(a+1,a+n+1);
sort(b+1,b+n+1);
for(int i=1;i<=n;i++){
ans+=max(a[i],b[i]);
}
}
else{
sort(a+1,a+n+1);
sort(b+1,b+n+1,cmp);
for(int i=1;i<=n;i++){
ans+=max(a[i],b[i]);
}
}
cout<<ans;
return 0;
}//AC
浙公网安备 33010602011771号