zoukankan      html  css  js  c++  java
  • CodeForces 709B Checkpoints 模拟

    题目大意:给出n个点的坐标,和你当前的坐标,求走过n-1个点的最短路程。

    题目思路:走过n-1个点,为了使路程更短,那么不走的点只可能第一个点或最后一个点。模拟就行了,比较恶心。

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 #include<stdio.h>
     6 #include<stdlib.h>
     7 #include<queue>
     8 #include<math.h>
     9 #include<map>
    10 #define INF 0x3f3f3f3f
    11 #define MAX 10000005
    12 #define Temp 1000000000
    13 
    14 using namespace std;
    15 
    16 long long a[MAX];
    17 
    18 int main()
    19 {
    20     int n,k,index,i,d;
    21     long long lsum1,rsum1,lsum2,rsum2;
    22     while(scanf("%d%d",&n,&k)!=EOF)
    23     {
    24         index=-1;
    25         for(int i=1;i<=n;i++)
    26             scanf("%lld",&a[i]);
    27         sort(a+1,a+n+1);
    28         if(n==1)//如果只有一个点,输出0
    29         {
    30             printf("0
    ");
    31             continue;
    32         }
    33         if(k<=a[1])//如果起始坐标在最左边,则达到第n-1个点结束
    34         {
    35             printf("%lld
    ",a[n-1]-k);
    36             continue;
    37         }
    38         else if(k>=a[n])//如果起始坐标在最右边,则到达第二个点结束
    39         {
    40             printf("%lld
    ",k-a[2]);
    41             continue;
    42         }
    43         else if(n==2)//如果只有两个点 
    44         {
    45             long long ans=min(k-a[1],a[2]-k);
    46             printf("%lld
    ",ans);
    47         }
    48         else
    49         {
    50             for(int i=1;i<=n;i++)
    51             {
    52                 if(a[i]>k)
    53                 {
    54                     index=i-1;
    55                     break;
    56                 }
    57             }
    58             if(index>=n-1)
    59             {
    60                 lsum1=(k-a[1]);//不拿N点
    61                 lsum2=(a[n]-k)*2+(k-a[2]);//不拿1点
    62                 rsum1=(k-a[2])*2+(a[n]-k);//不拿1点
    63                 long long ans=min(min(lsum1,lsum2),rsum1);
    64                 printf("%lld
    ",ans);
    65                 continue;
    66             }
    67 
    68             else if(index<=2)
    69             {
    70                 lsum1=(a[n]-k);//不拿1
    71                 lsum2=(k-a[1])*2+(a[n-1]-k);//不拿n
    72                 rsum1=(a[n-1]-k)*2+(k-a[1]);//不拿n
    73                 long long ans=min(min(lsum1,lsum2),rsum1);
    74                 printf("%lld
    ",ans);
    75                 continue;
    76             }
    77             lsum1=(k-a[1])*2+(a[n-1]-k);
    78             lsum2=(a[n-1]-k)*2+(k-a[1]);
    79             rsum1=(k-a[2])*2+(a[n]-k);
    80             rsum2=(a[n]-k)*2+(k-a[2]);
    81             long long ans=min(min(rsum1,rsum2),min(lsum1,lsum2));
    82             printf("%lld
    ",ans);
    83         }
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    Codeforces C. Almost Equal (数学规律)
    codeforce D. Shortest Cycle(floyd求最短环)
    Codeforces 1204D2. Kirk and a Binary String (hard version) (dp思路)
    codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)
    hdu 6214 Smallest Minimum Cut(最小割的最少边数)
    扩展欧几里得求解同余方程(poj 1061)
    poj 3281Dining(网络流 拆点)
    poj 3057(bfs+二分匹配)
    买鱼杂感
    geotrellis使用(十四)导出定制的GeoTiff
  • 原文地址:https://www.cnblogs.com/alan-W/p/5932236.html
Copyright © 2011-2022 走看看