• CF1129A2 Toy Train


    https://codeforces.ml/problemset/problem/1129/A2

    对于一个车站,有x个糖果,至少要经过这个车站x次,因为每次都只能装一颗,那就意味着至少要跑x-1圈,那么在一圈中肯定已经经过了要卸货的车站,因为一圈嘛,所有的车站都经过了一遍,所以对于一个车站,再次经过该车站的时候之前从该车站装上的货物肯定卸了,所以对于x-1圈来说,该车站的x-1颗糖果已经卸完了,一个车站的糖果全部卸完就需要(x-1)*n+最后一颗糖果需要的时间,那么如果不是以该车站为火车开始的起点的话,还要加上从起点到该车站的时间,只要双重遍历就可以,1.以某个车站为起点,2.所有车站的时间,取最大值,就可以算出以所有车站为起点所需的时间啦

    #include<iostream>
    #include<vector>
    #include<cstring>
    using namespace std;
    const int N=5010;
    vector<int> candy[N];
    int n,m;
    int dist[N];//每个顶点所送糖果距离的最小值 
    
    int main()
    {
    	cin>>n>>m;
    	memset(dist,0x3f,sizeof dist);
    	while(m--)
    	{
    		int a,b;
    		cin>>a>>b;
    		candy[a].push_back(b);
    		dist[a]=min(dist[a],(b-a+n)%n);
    	}
    	
    	
    	for(int i=1;i<=n;i++)
    	{
    		int res=0;
    		int sum=0;
    		for(int j=1;j<=n;j++)
    		{
    			if(!candy[j].size())
    				continue;
    			sum=(j-i+n)%n+(candy[j].size()-1)*n+dist[j];
    			//(j-i+n)%n为当前顶点到起点的距离 
    			//cout<<"--"<<j<<' '<<sum<<endl;
    			res=max(res,sum);//所有顶点送完糖果的最大值为当前起点为i的状态下送完糖果的所需时间 
    		}
    		cout<<res<<endl;
    	}
    }
    
  • 相关阅读:
    第二阶段冲刺第七天
    学习进度表_十五周
    第二阶段冲刺第六天
    第二阶段冲刺第五天
    第二阶段冲刺第四天
    第二阶段冲刺第三天
    Beta阶段项目总结
    Alpha阶段项目总结
    第二次冲刺站立会议10
    第二次冲刺站立会议09
  • 原文地址:https://www.cnblogs.com/fxh0707/p/12307032.html
Copyright © 2020-2023  润新知