日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces - 1350D Orac and Medians(思维)

發(fā)布時(shí)間:2024/4/11 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 1350D Orac and Medians(思维) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:點(diǎn)擊查看

題目大意:給出一個(gè)長度為 n 的數(shù)列,以及一個(gè)數(shù)字 k ,每次操作可以將一段連續(xù)區(qū)間 [ l , r ] 內(nèi)的數(shù)字全部替換成該區(qū)間的中位數(shù),問能否通過適當(dāng)?shù)牟僮魇沟谜麄€(gè)數(shù)列的 n 個(gè)數(shù)字全部等于 k?

題目分析:首先不難看出,如果區(qū)間內(nèi)不存在數(shù)字 k 的話一定是 no ,然后我設(shè):

  • 小于 k 的數(shù)為 -1
  • 大于 k 的數(shù)為 1
  • 等于 k 的數(shù)為 0
  • 因?yàn)樽罱K需要使得整個(gè)數(shù)列都變成中位數(shù),所以我們不妨一開始就對(duì)區(qū)間 [ 1 , n ] 進(jìn)行討論,分為三種情況:sum 為區(qū)間和

  • 如果 sum == 0 的話,說明等于 k 的數(shù)已經(jīng)位于中位數(shù)的位置了,顯然為 yes
  • 如果 sum > 0 的話,說明大于 k 的數(shù)比較多,需要減少大于 k 的數(shù)量,因?yàn)榇藭r(shí)經(jīng)過篩選后,區(qū)間內(nèi)一定存在等于 k 的數(shù),即一定存在著非正數(shù)( -1 和 0 ),與這些非正數(shù)相鄰的正數(shù)可以組成長度為 2 的區(qū)間,此時(shí)正數(shù)都可以根據(jù)規(guī)則被同化為非正數(shù),所以通過適當(dāng)?shù)牟僮骺梢允?sum 不斷減小,直到 sum == 0 ,所以這種情況也顯然為 yes
  • 如果 sum < 0 的話,根據(jù)上面的思想,我們的目標(biāo)是令 sum 不斷增大,直到 sum == 0 為止,如果負(fù)數(shù)想要被同化為非負(fù)數(shù)的話,需要在長度至少為 3 的區(qū)間內(nèi),滿足:有一個(gè)負(fù)數(shù)以及兩個(gè)非負(fù)數(shù)才行
  • 綜上所述,只要數(shù)列中存在著 相鄰,或者相隔為 1 的非負(fù)數(shù)就是yes

    代碼:
    ?

    #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;int n,k,a[N];bool check() {if(n==1&&a[1]>=0)return true;for(int i=1;i<=n;i++)if(a[i]&(a[i+1]|a[i+2]))return true;return false; }int main() { #ifndef ONLINE_JUDGE // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); #endif // ios::sync_with_stdio(false);int w;cin>>w;while(w--){scanf("%d%d",&n,&k);bool flag=false;for(int i=1;i<=n;i++){scanf("%d",a+i);if(a[i]==k)flag=true;a[i]=(a[i]>=k);}if(!flag){puts("no");continue;}a[n+1]=a[n+2]=0;if(check())puts("yes");elseputs("no");}return 0; }

    ?

    總結(jié)

    以上是生活随笔為你收集整理的CodeForces - 1350D Orac and Medians(思维)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。