• 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
  • 相关阅读:
    unity 3d 之合并网格和贴图(combine mesh and texture)
    哈希表(散列表)原理详解
    二叉树-你必须要懂!(二叉树相关算法实现-iOS)
    浅谈数据结构-二叉树
    python中的日志操作和发送邮件
    python实现自定义接口
    python 操作excel
    两个redis之间迁移的python实现
    python对redis的连接和操作
    python3导入自定义模块
  • 原文地址:https://www.cnblogs.com/alan-W/p/5932236.html
Copyright © 2020-2023  润新知