https://vjudge.net/contest/200122#problem/B
水题,然而错了6发。后来对的时候也不清楚。
看了数据才清楚。。。
给定n个队员的第一棒速度 和其他棒的速度。问你如何调配4个队员,能够使他们更快的胜利。
第2,3,4棒的速度都是一样的,并且数据范围其小无比,所以直接暴力就行。。
我是枚举i队员作为第一棒,然后排序,找前三个 y值最小的, 参加比赛。 然后维护最大值。。
第21组数据,一直wa。wa的很气
sort再里面排,可能有的人还没有被枚举到 作为第一棒队员,就被排序再后面了。导致 枚举结果不全
#include <bits/stdc++.h>
using namespace std;
/* 排序
*/
struct Node{
double x,y;
string name;
int id;
}node[1000];
int m;
vector<string>q;
vector<string>v;
bool cmp2(Node a1,Node b1){
return a1.y<b1.y;
}
int main()
{ cin>>m;
for(int i=0;i<m;i++){
cin>>node[i].name;
//cout<<node[i].name<<node[i].name.length()<<endl;
cin>>node[i].x>>node[i].y;
node[i].id=i;
}
//cout<<"!!"<<endl;
v.clear();
double rel=-1;
sort(node,node+m,cmp2);
for(int i=0;i<m;i++){
int tim=0;
double ans=node[i].x;
int bh=node[i].id;
q.clear();
q.push_back(node[i].name);
//开始再这里面sort的
for(int j=0;j<m;j++){
if(tim==3) break;
int bh2=node[j].id;
if(bh2==bh) continue;
q.push_back(node[j].name);
tim++;
ans+=node[j].y;
}
if(tim<3) continue;
//cout<<ans<<endl;
if(ans<rel||rel==-1){
v.clear();
for(int j=0;j<q.size();j++){
v.push_back(q[j]);
}
q.clear();
rel=ans;
}
}
cout<<rel<<endl;
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
return 0;
}