• codeforces 1129A2-Toy Train


    传送门:QAQQAQ

    题意:有1-n个站点,成环形,有一辆运货车,在这个n个站点之间运输糖果,货车只能按照1->n的方向走,到第n个站的时候,又回到的1,现在告诉你有m个运输任务,从x站点运输一个糖果到y站点。已知货车的容量足够大,可以同时装无数个糖果,但是每一次经过一个站的时候,只能够选择其中一项任务进行运输,假设从一个站到另一个站的运输时间为1,请问从1-n每个站点作为起点,最短的运输时间分别是多少

    假设从第i个点出发要运输K个糖果,那么就要经过点iK次。所以预处理出运输完这些糖果最后停下的最近点,就是满足i点的最近距离,对所有最近距离取MAX,就是最终答案
    用t表示糖果数,p表示最近点
    (t[j]=0要判掉,因为根本不用考虑从i走到j,而且在代码中t[j]=0时p[j]=n,所以会把n*(t[j]-1)抵掉)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int n,m,r=0;
     5 vector<int> v[6050];
     6 int p[6050],t[6050];
     7 
     8 int calc(int s,int e)
     9 {
    10     int ret=e-s;
    11     if (ret<0) ret+=n;
    12     return ret;
    13 }
    14 
    15 int main()
    16 {
    17     memset(t,0,sizeof(t));
    18     scanf("%d%d",&n,&m);
    19     for(int i=1;i<=m;i++)
    20     {
    21         int x,y;
    22         scanf("%d%d",&x,&y);
    23         v[x].push_back(y);
    24         t[x]++;
    25     }
    26     for(int i=1;i<=n;i++)
    27     {
    28         int minn=n;
    29         for(int j=0;j<(int)v[i].size();j++)
    30         {
    31             minn=min(minn,calc(i,v[i][j]));
    32         }
    33         p[i]=minn;
    34     }
    35     for(int i=1;i<=n;i++)
    36     {
    37         int ans=0;
    38         for(int j=1;j<=n;j++)
    39         {
    40             if(t[j]==0) continue;
    41             ans=max(ans,calc(i,j)+n*(t[j]-1)+p[j]);
    42         }
    43         printf("%d ",ans);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    SQL的Demo 由Access改为SQLite
    Delphi10.3ComboBoxEx下拉左边带图标
    uniGUI学习之IconCombobox(53)
    MySQL的图形GUI界面Navicat操作(03)
    delphi10.3安装使用mySQL(02)从SQLite 转移至Mysql
    [转] Java虚拟机原理图解 系列
    [转]ASM插入代码 visitFieldInsn
    [转]大话+图说:Java字节码指令——只为让你懂
    [转]smali语言之locals和registers的区别
    [转]Smali浅析及dex,java互转
  • 原文地址:https://www.cnblogs.com/Forever-666/p/10531429.html
Copyright © 2020-2023  润新知