zoukankan      html  css  js  c++  java
  • 【题解】【Atcoder】AGC006D Median Pyramid Hard

    AGC006 D Median Pyramid Hard

    一个长度为奇数的排列,令b[i]=median(a[i],a[i+1],a[i+2])

    median表示中位数

    不断执行上述变化序列最终变成一个数,问它是什么

    sol

    考虑二分最终答案,比它小的设为0,大的设为1

    那么三角的状态就是这样:

    如果一个地方有连着两个0/1,那么这两个位置就是一个“柱子”——他们的上面都是相同的0/1,而且会往中间靠

    那么,我们只需要找到距离中间最近的的柱子,就能确定是0还是1

    如果是10交替,那么就是第一个数

    code

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int N=200010;
    
    inline void read(int &x) {
        x=0;
        int f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9') {
            if (ch=='-') {
                f=-1;
            }
            ch=getchar();
        }
        while(ch>='0'&&ch<='9') {
            x=x*10+ch-'0';
            ch=getchar();
        }
        x*=f;
    }
    
    int a[N];
    int n;
    int ans;
    
    inline bool up(int x,int y,int mid) {
        return a[x]>mid&&a[y]>mid;
    }
    
    inline bool down(int x,int y,int mid) {
        return a[x]<=mid&&a[y]<=mid;
    }
    
    inline bool check(int mid) {
        for(int i=0;i<n-1;i++) {
            if (up(n-i,n-i-1,mid)||up(n+i,n+i+1,mid)) {
                return 0;
            }
            if (down(n-i,n-i-1,mid)||down(n+i,n+i+1,mid)) {
                return 1;
            }
        }
        return down(1,1,mid);
    }
    
    int main() {
        read(n);
        for(int i=1;i<=n*2-1;i++) {
            read(a[i]);
        }
        int l=0,r=n*2-1;
        while(l<=r) {
            int mid=(l+r)>>1;
            if (check(mid)) {
                r=mid-1;
                ans=mid;
            } else {
                l=mid+1;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    OCP-1Z0-052-V8.02-112题
    OCP-1Z0-052-V8.02-109题
    OCP-1Z0-052-V8.02-41题
    OCP-1Z0-052-V8.02-40题
    OCP-1Z0-053-V12.02-492题
    基于MysqlConnector/C++的数据库连接池的实现
    mysql Connector C/C++ 多线程封装
    OCP-1Z0-052-V8.02-108题
    OCP-1Z0-052-V8.02-105题
    OCP-1Z0-052-V8.02-104题
  • 原文地址:https://www.cnblogs.com/tt66ea-blog/p/13831297.html
Copyright © 2011-2022 走看看