您的位置:首页 > 其它

Gym - 101572B-水题&思维漏洞&排序相关-B - Best Relay Team

2017-11-20 22:02 543 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: