AT2165-[AGC006D]MedianPyramidHard【二分,贪心】
生活随笔
收集整理的這篇文章主要介紹了
AT2165-[AGC006D]MedianPyramidHard【二分,贪心】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正題
題目鏈接:https://www.luogu.com.cn/problem/AT2165
題目大意
nnn行的一個(gè)金字塔,第iii層有2×i?12\times i-12×i?1個(gè)格子,每個(gè)格子是它左右下的中位數(shù)。給出最下面的2n?12n-12n?1個(gè)數(shù),求第一行的數(shù)。
解題思路
我們先二分一個(gè)答案,然后變成010101,如果它的下方有兩個(gè)或以上的就是這個(gè)格子的。
找到一個(gè)離中間最近的相鄰的相同顏色,這個(gè)顏色就是答案,因?yàn)檫@兩個(gè)數(shù)頂上連續(xù)到中間的都是這個(gè)顏色,因?yàn)橹挥辛硪粋€(gè)連續(xù)相同的顏色才能隔開(kāi)這些顏色,但是如果找到了這兩個(gè),那么就有更優(yōu)的答案案了,所以結(jié)論成立。
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=2e5+10; int n,a[N]; int check(int x){for(int i=1;i<=n;i++){if(a[n-i+1]<x&&a[n-i]<x||a[n+i-1]<x&&a[n+i]<x)return 0;if(a[n-i+1]>=x&&a[n-i]>=x||a[n+i-1]>=x&&a[n+i]>=x)return 1;}return a[1]>=x; } int main() {scanf("%d",&n);for(int i=1;i<=2*n-1;i++)scanf("%d",&a[i]);int l=1,r=2*n;while(l<=r){int mid=(l+r)>>1;if(check(mid))l=mid+1;else r=mid-1;}printf("%d",r); } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的AT2165-[AGC006D]MedianPyramidHard【二分,贪心】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 岚图:旗下首款电混轿车追光 PHEV“智
- 下一篇: P1829-[国家集训队]Crash的数