zoukankan      html  css  js  c++  java
  • ZOJ4107 Singing Everywhere

    给出n个数 最多可以消除一个数 问这个n或n-1个数中满足a[i] > a[i - 1] && a[i] > a[i + 1]的数最少

    直接模拟就行了

    AC代码:

     1 #include<bits/stdc++.h>
     2 #define pi acos(-1)
     3 #define INF 0x3f3f3f3f
     4 typedef long long ll;
     5 typedef unsigned long long ull;
     6 using namespace std;
     7 
     8 namespace io {
     9     const int SIZE = 1e7 + 10;
    10     char inbuff[SIZE];
    11     char *l, *r;
    12     inline void init() {
    13         l = inbuff;
    14         r = inbuff + fread(inbuff, 1, SIZE, stdin);
    15     }
    16     inline char gc() {
    17         if (l == r) init();
    18         return (l != r) ? *(l++) : EOF;
    19     }
    20     void read(int &x) {
    21         x = 0; char ch = gc();
    22         while(!isdigit(ch)) ch = gc();
    23         while(isdigit(ch)) x = x * 10 + ch - '0', ch = gc();
    24     }
    25 } using io::read;
    26 
    27 bool cmp(const int &a, const int &b){
    28     return a > b;
    29 }
    30 
    31 int main(){
    32     ios::sync_with_stdio(false);
    33     int t;
    34     cin>>t;
    35     ll a[100005];
    36     int n;
    37     while (t--){
    38         cin>>n;
    39         memset(a, 0, sizeof(a));
    40         for (int i = 1; i <= n; i++) cin>>a[i];
    41         a[0] = 9223372036854775807, a[n + 1] = 9223372036854775807;
    42         int cnt = 0;
    43         for (int i = 2; i < n; i++)
    44             if (a[i] > a[i - 1] && a[i] >a[i + 1])
    45                 cnt++;
    46         int ans = 0;
    47         int ans1, ans2;
    48         for (int i = 2; i < n; i++){
    49             ans1 = 0, ans2 = 0;
    50             if (a[i - 1] > a[i + 1] && a[i - 1] > a[i - 2]) ans1++;
    51             if (a[i + 1] > a[i - 1] && a[i + 1] > a[i + 2]) ans1++;
    52             if (a[i - 1] > a[i - 2] && a[i - 1] > a[i]) ans2++;
    53             if (a[i + 1] > a[i + 2] && a[i + 1] > a[i]) ans2++;
    54             if (a[i] > a[i - 1] && a[i] > a[i + 1]) ans2++;
    55             ans = max(ans, ans2 - ans1);
    56         }
    57         cout<<cnt - ans<<endl;
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    linux基础——虚拟机的创建及安装操作系统
    并发编程之多进程
    操作系统与进程(理论知识点)
    粘包
    socket-网络编程
    网络编程1
    网络编程
    异常
    元类
    反射与内置方法
  • 原文地址:https://www.cnblogs.com/Misuchii/p/10983784.html
Copyright © 2011-2022 走看看