0
已解决
左文彬
新手光能
新手光能
题目链接: 酷町堂:1000
骗你的
1085怎么写
#include<bits/stdc++.h>
using namespace std;
struct x{
int denji,zhuchang,kechang;
}a[10005];
bool cmp(x a,x b){
return a.denji<b.denji;
}
int main(){
int n,k;
cin>>n>>k;
int chazhizonghe=0;
for(int i=1;i<=n;i++){
cin>>a[i].denji;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=k;i++){
if(a[i].zhuchang==0&&a[i+1].kechang==0){
//就是这里
chazhizonghe+=a[i+1].denji-a[i].denji;
a[i].zhuchang=1;
a[i].kechang=1;
}else{
k++;
}
}
cout<<chazhizonghe;
}
只要if思路
不要代码
0
已采纳
王梓轩
资深光能
资深光能
如果真的要告诉你的话,这题:为了庆祝元旦,J市决定举办全市小学足球联赛。各学校积极响应,共有N支球队报名参加,爱好足球的小W也参加了。为了活动的开展和不影响学生学习,只能安排K场比赛,每支球队最多参加两场比赛,至少参加零场比赛。因球队水平不同,每支球队都拥有一个和其他球队不同的水平等级(用一个正整数来表示)。在比赛中,等级高的球队必须作为客场,等级低的球队必须作为主场。每个球队最多只能做一次主场和一次客场。为了增加比赛的观赏度,观众希望K场比赛中球队水平差距的总和最小。比如有7支球队,他们的等级分别是30、17、26、41、19、38、18,要进行3场比赛。那么最好安排是球队2 vs 球队7, 球队7 vs 球队5 ,球队6 vs 球队4,此时等级差的总和等于(18-17) + (19-18) + (41-38) = 5达到最小。
其实很简单,不用结构体就能做,这个其实是:辅助数组+贪心
伪代码自行理解一下:
......
int n,k,a[10005],c[10005],ans;
主函数
{
输入n,k;
循环输入1~n:a[i];
排序a数组;
循环1~n:c[i]=a[i+1]-a[i];/*核心在这里,要细细体会*/
排序c数组(c+1,c+n)
循环1~k:ans加上c[i]
输出ans;
}
0
0