<题目链接>
题目大意:
有一个的环形火车站,其中有$[1,n] n$个站台,站台上能够放糖果,火车只能朝一个方向移动,如果火车在站台$i$,那么下一秒就会在$i+1$站(如果$i=n$,则下一站为1),现在有$m$ 个运输糖果的方案,$s e$表示站台$s$有一个糖果,现在需要将其运往站台$e$。火车容量不限,但是每次只能从站台上取出一颗糖果,火车可以卸载任意数量的糖果。现在求出火车从每个站台出发,完成所有糖果运输任务的最短时间。
#include <bits/stdc++.h> using namespace std; #define N int(5e3+7) int cnt[N],mnri[N]; int main(){ int n,m,a,b; scanf("%d %d",&n,&m); for(int i=1;i<=n;++i)mnri[i]=1e9; for(int i=0;i<m;++i){ scanf("%d %d",&a,&b); cnt[a]++; //得到这个点能够收集的糖果数 mnri[a]=min(mnri[a],(b>a)?(b-a):(n-a+b)); //起点到终点的环型距离 } for(int i=1;i<=n;++i){ //枚举起点 int ans=0; for(int j=1;j<=n;++j){ //枚举终点 if(cnt[j]){ //一个位置经过的次数为糖果数(因为一定要从这个点取出这么多糖果),但是最后一圈可以不用跑完整的一圈 int to=((j>=i)?(j-i):(n-i+j))+(cnt[j]-1)*n+mnri[j]; ans=max(ans,to); //送完所有糖果的最少时间为送完每个糖果点的糖果的最多时间 } } printf("%d ",ans); }puts(""); }
2019-02-25