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

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值