1. 程式人生 > >每天一道算法題(3/1—3/31)

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

iostream alt onclick cli name pen 需要 是把 ios

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

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