txh0609

导航

 

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
posted on 2026-05-30 16:55  txh0609  阅读(18)  评论(0)    收藏  举报