Codeforces 1130D1 Toy Train (Simplified) (思维)【贪心】

<题目链接>

题目大意:

有一个的环形火车站,其中有$[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

posted @ 2019-02-25 22:34  悠悠呦~  阅读(295)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end