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 }