zoukankan      html  css  js  c++  java
  • 清北第四套题

                                       他

    【问题描述】

    一张长度为的纸带,我们可以从左至右编号为(纸带最左端标号为)。现在有次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带的长度是多少。

    【输入格式】

    第一行两个数字如题意所述。

    接下来一行个整数代表每次折叠的位置。

    【输出格式】

    一行一个整数代表答案。

    【样例输入】

    5 2

    3 5

    【样例输出】

    2

    【样例解释】

    树上有只鸟。

    【数据规模与约定】

    对于60%的数据,N,M<=3000。     

    对于100%的数据,N<=10^18,M<=3000。

     

     

    题解:每次折叠时,更新纸带的左右端点,以及这次折叠之后折叠位置的编号。

     

     #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #define N 3100
    #define ll long long 
    using namespace std;
    int m;
    ll n,l(0),r;
    ll a[N];
    int main()
    {
        freopen("he.in","r",stdin);
        freopen("he.out","w",stdout);
        cin>>n>>m;
        r=n;
        for (int i=1;i<=m;i++) 
           cin>>a[i];
        for (int i=1;i<=m;i++)
          {
               if (a[i]*2>=l+r) r=a[i];//更新端点 
                 else l=a[i];
               for (int j=i+1;j<=m;j++)//更新位置 
                 {
                    if (a[j]<l) a[j]=l*2-a[j];
                  if (a[j]>r) a[j]=r*2-a[j];    
               }
          }
        cout<<r-l<<endl;
        
        fclose(stdin);
        fclose(stdout);
        
        return 0;
    }
    参考自hwh大神
  • 相关阅读:
    动网16位gb2312md5加密
    开发windows7侧边栏小工具
    MVC文档地址
    关闭FCNs(文件修改监控)
    内存管理
    android笔记一(Button)
    android笔记五ImageButton
    android笔记三FrameLayout
    linux内核各组件的功能介绍
    C++面试题
  • 原文地址:https://www.cnblogs.com/sjymj/p/6037768.html
Copyright © 2011-2022 走看看