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 }