每天一道算法题(3/1—3/31)

2019/3/1

CF 1130D1 Toy Train (Simplified)

先把每个点处理,计算该点运送完需要的时间;遍历每个点时给它绕一圈,找到时间最长的那个,那个就是把所有运送完所需的时间。注意如果没有货物,需要跳过该点。

 1 #include <vector>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 const int N=222;
 9 const int INF=0x3f3f3f3f;
10 int ans[N];
11 vector <int> s[N];
12 
13 int main(){
14     int n,m;
15     scanf("%d%d",&n,&m);
16     for(int i=1;i<=m;i++){
17         int a,b;
18         scanf("%d%d",&a,&b);
19         s[a].push_back(b);
20     }
21     for(int i=1;i<=n;i++){
22         int mi=INF;
23         for(int j=0;j<s[i].size();j++){
24             int u=s[i][j];
25             if(u>=i) mi=min(mi,u-i);
26             else mi=min(mi,n-i+u);
27         }
28         if(mi!=INF) ans[i]=n*(s[i].size()-1)+mi;
29     }
30     for(int i=1;i<=n;i++){
31         int res=0,time=n,k=i,cnt=0;
32         while(time--){
33             //注意
34             if(ans[k]!=0) res=max(res,ans[k]+cnt);
35             k++;
36             if(k==n+1) k=1;
37             cnt++;
38         }
39         printf("%d ",res);
40     }
41     return 0;
42 }
View Code

猜你喜欢

转载自www.cnblogs.com/ehanla/p/10459277.html