• JZ初中OJ 1999.[2015.8.6普及组模拟赛] Wexley接苹果


    题目描述

             Wexley最近发现了一个古老的屏幕游戏。游戏的屏幕被划分成n列。在屏幕的底端,有一个宽为m列的篮子(m<n)。在游戏过程中,Wexley能左右移动这个篮子,            Wexley的操作很犀利,移动是瞬间完成的,但是篮子必须始终都在屏幕中。 苹果从屏幕的顶端落下,每个苹果从n列中的某一列顶端掉落,垂直掉落到屏幕的底端。每个苹果总是在上一个苹果掉落到底端的时候开始掉落。Wexley想要通过移动篮子来接住所有的苹果。起先,篮子在屏幕的最左端。
             求出Wexley要接住所有的苹果所需移动的最短距离。 
     

    输入

    第一行,两个整数n、m,如题所述
    第二行,一个整数k,表示掉落的苹果总数
    接下来k行,每行一个整数Ai,表示每个苹果掉落的位置

    输出

    一行一个整数,表示所需移动最短距离
     

    样例输入

    Sample Input1:
    5 1
    3
    1
    5
    3

    Sample Input2:
    5 2
    3
    1
    5
    3

     

    样例输出

    Sample Output1:
    6

    Sample Output2:
    4

     
     

    数据范围限制

    【数据范围】
    对于30%的数据,m<n<=5,k<=10
    对于100%的数据,1<=m<n<=10,1<=k<=20
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,k,a[21];
     4 int b[21],head,ans,tmp;
     5 int main()
     6 {
     7     freopen("apple.in","r",stdin);
     8     freopen("apple.out","w",stdout);
     9     cin>>n>>m>>k;
    10     b[0]=1;
    11     for(int i=1;i<=k;i++)
    12     {
    13         cin>>a[i];
    14     }
    15     head=m;
    16     for(int i=1;i<=k;i++)
    17     {
    18         if(head>=a[i] && (head-m+1)<=a[i])
    19         continue;
    20         if(head<a[i])
    21         {
    22             ans+=a[i]-head;
    23             head+=a[i]-head;
    24             continue;
    25         }
    26         if((head-m+1)>a[i])
    27         {
    28             int tmp=head;
    29             head=a[i]+m-1;
    30             ans+=tmp-head;
    31             continue;
    32         }
    33     }
    34     cout<<ans;
    35 }
  • 相关阅读:
    SQL注入
    浅复制
    重构
    UML
    UML
    工业4.0
    MVC
    博客搬家(CSDN->博客园)
    BitCoin
    Java
  • 原文地址:https://www.cnblogs.com/dsanying/p/11305423.html
Copyright © 2020-2023  润新知