zoukankan      html  css  js  c++  java
  • EOJ2018.10 月赛(B 数学+思维题)

    传送门:Problem B

     https://www.cnblogs.com/violet-acmer/p/9739115.html

    题意:

      找到最小的包含子序列a的序列s,并且序列s是 p -莫干山序列。

    题解:

      很容易想到 p = max_ai+1,并且a[1]对应着s[1],不然需要在a[1]前加其他数来使的a[1]->某s[i],肯定比不加的序列要长。

      遍历a[ ] 数组,分三种情况讨论

      ①a[i] > a[i-1]

        此种情况下,a[i-1]--a[i]在s中是连续的一段序列,res += a[i]-a[i-1]。

      ②a[i] < a[i-1]

        这种条件对应的情况为 a[i-1] -> p -> a[i] ,res += p-a[i-1]+a[i]。

      ③a[i] == a[i-1]

        相等的话,正好相差一个周期,res += p 。

      注意结果要用 long long 型。

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 #define ll long long
     5 const int maxn=2e5+50;
     6 
     7 int a[maxn];
     8 
     9 int main()
    10 {
    11     int n;
    12     scanf("%d",&n);
    13     for(int i=1;i <= n;++i)
    14         scanf("%d",a+i);
    15     ll res=1;
    16     int p=0;
    17     for(int i=1;i <= n;++i)
    18         p=max(p,a[i]);
    19     p++;
    20     for(int i=2;i <= n;++i)
    21     {
    22         if(a[i] > a[i-1])
    23             res += a[i]-a[i-1];
    24         else if(a[i] < a[i-1])
    25         {
    26             int k=a[i-1]/p;
    27             res += ((k+1)*p-a[i-1])+a[i];
    28         }
    29         else
    30             res += p;
    31     }
    32     printf("%lld
    ",res);
    33 }
    View Code
  • 相关阅读:
    大白话五种IO模型
    test
    shutil模块(了解)
    isinstance和issubclass
    变量的三个特征
    匿名函数
    javascript location 对象
    select元素javascript常用操作
    设置mysql的用户权限
    jquery
  • 原文地址:https://www.cnblogs.com/violet-acmer/p/9739097.html
Copyright © 2011-2022 走看看