Codeforces Gym101572 B.Best Relay Team (2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NC...

2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

今日份的训练,题目难度4颗星,心态被打崩了,会的算法太少了,知道要用什么写,但是写不出来啊(抱头痛哭)
和猪队友一共写出来3道题,本来I题应该可以写出来的,有向图求最小环输出路径就可以,But,没有板子啊!!!(。•́︿•̀。)

赛后补题,补一下I(单独写),D题和E题表示读不懂题,不知道要干嘛,D题是bfs+位运算 ,E题是bfs+优先队列,题意都读不懂,题解肯定更看不懂啊(痛哭)

算了算了,先占个坑,今晚脑袋有点乱,先看会书,明天来冒泡(ಥ_ಥ)(脑子已经成猪了)

思想斗争一番,还是继续写题解(;´д`)ゞ

 

 

Problem B Best Relay Team

这个题就是选运动员,因为运动员爆发和慢慢加速的速度是不一样的(很现实,突然开始跑和慢慢加速跑,同样的路程跑的时间肯定不一样,除了第一棒,其他的几棒都可以先助跑一小段,不了解游戏规则的自己去跑一跑就懂了。。。),这个题就是选4个人去跑接力,总用时最少。就让你选,选吧。我一开始写的时候想的是按第二个时间排序,但是写挫了(;´д`)ゞ,还好队友给力,把这道题给a了(我的队友无敌的),按照队友的思路,自己敲了一份代码,就是枚举每一个人,让这个人当第一棒,然后再找除了这个人的其他人中第二棒跑的最快的3个人,然后所有情况中选总用时最少的就是答案。

 

代码:

 1 //B-不好玩
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<cstring>
 6 #include<cstdlib>
 7 #include<string.h>
 8 #include<set>
 9 #include<vector>
10 #include<queue>
11 #include<stack>
12 #include<map>
13 #include<cmath>
14 using namespace std;
15 typedef long long ll;
16 const int INF=0x3f3f3f3f;
17 const int maxn=1e5+10;
18 double PI=acos(-1.0);
19 struct node{
20     string s;
21     double fir,sec;
22 }a[maxn];
23 bool cmp(node a,node b){
24     return a.sec<b.sec;
25 }
26 int main(){
27     int n;
28     ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
29     while(cin>>n){
30         for(int i=0;i<n;i++)
31             cin>>a[i].s>>a[i].fir>>a[i].sec;
32         sort(a,a+n,cmp);
33         double ans=INF;
34         string name[5];
35         for(int i=0;i<n;i++){
36             double temp=0;
37             int h=0;
38             string ret[5];
39             temp+=a[i].fir;
40             ret[h++]=a[i].s;
41             int j=0;
42             while(h!=4&&j<n){
43                 if(i==j)j++;
44                 else{
45                     temp+=a[j].sec;
46                     ret[h++]=a[j].s;
47                     j++;
48                 }
49             }
50             if(temp<ans){
51                 ans=temp;
52                 for(int k=0;k<4;k++)
53                     name[k]=ret[k];
54             }
55         }
56         cout<<ans<<endl;
57         for(int i=0;i<4;i++)
58             cout<<name[i]<<endl;
59     }
60     return 0;
61 }

 

转载于:https://www.cnblogs.com/ZERO-/p/8362048.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值