zoukankan      html  css  js  c++  java
  • 2019浙大校赛--G--Postman(简单思维题)

    一个思维水题

    题目大意为,一个邮递员要投递N封信,一次从邮局来回只能投递K封。求最短的投递总距离。需注意,最后一次投递后无需返回邮局。

    本题思路要点:

    1、最后一次投递无需返回邮局,故最后一次投递所行走距离不必乘2(即不必记录返程),所以最后一次投递的是最远的三个信;

    2、画图模拟可知,我们可将正负轴的邮件分开进行处理,先处理某一轴的全部信件,在处理另一轴的全部信件;

    根据上述思路可得如下代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<memory.h>
     4 #include<stdio.h>
     5 #define max 1000005
     6 using namespace std;
     7 int a[100005],b[100005];
     8 int main(){
     9     int t;
    10     scanf("%d",&t);
    11     while(t--){
    12         int n,m,z,x=0,y=0,M;
    13         scanf("%d %d",&n,&m);
    14         memset(a,0,sizeof(a));
    15         memset(b,0,sizeof(b));
    16         for(int i=0;i<n;i++){
    17             scanf("%d",&z);
    18             if(z>0){
    19                 a[x]=z;
    20                 x++;
    21             }
    22             else if(z<0){
    23                 b[y]=-z;
    24                 y++;
    25             }
    26         }
    27         sort(a,a+x);
    28         sort(b,b+y);
    29         if(a[x-1]>b[y-1]){  //判断最远点
    30             M=a[x-1];
    31         }
    32         else{
    33             M=b[y-1];
    34         }
    35         long long ans=0;//记得要 long long !!!!!
    36         while(x-1>=0){
    37             ans+=a[x-1]*2;
    38             x=x-m;
    39         }
    40         while(y-1>=0){
    41             ans+=b[y-1]*2;
    42             y=y-m;
    43         }
    44         ans-=M;
    45         cout<<ans<<endl;
    46     }
    47 }
  • 相关阅读:
    JavaScript坑
    maven学习
    JAVA多线程和并发基础面试问答(转)
    Redis与Memcached的区别(一)
    poi生成execl综合
    POI操作Excel常用方法总结(转)
    java中在创建对象时候的初始化顺序
    [Java Web]敏感词过滤算法
    orcle导入导出
    js动态时间
  • 原文地址:https://www.cnblogs.com/Never-Land/p/10713180.html
Copyright © 2011-2022 走看看