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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Round #651 (Div. 2) D

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #651 (Div. 2) D 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

D. Odd-Even Subsequence

題目大意:在a數組中 保留k個數字,如何代價最小的多少。
代價的算法 具體看題意:就是k數組中 min{max{奇數下標},max{偶數下標}}

解題思路:貪心加二分,二分全部的答案(即代價),然后檢查能不能達到這個代價。

檢查的思路: 我們只要 奇數下標或者偶數下標中 所以的數都小于mid值就能達到這個代價。
所以我們分為奇數下標和偶數下標來檢查。
貪心策略:如果我們在檢查奇數下標的時候,那么我們從索引1開始往后看,一旦發現這個數小于mid就趕快拿下來(保證全部小于mid),然后下一個數一點是作為偶數下標的數,無論這個數多大,這樣讓后面奇數的選擇更多。這個貪心策略是最優的,因為你下一個數只能作為偶數下標的數了(兩個數相鄰),這樣給了后面的數更多的可能成為奇數下標的數。
偶數同理。

代碼:

#include<cstdio> using namespace std; int N,K; int A[2<<17]; main() {scanf("%d%d",&N,&K);for(int i=0;i<N;i++)scanf("%d",&A[i]);int L=0,R=1e9;while(R-L>1){int M=L+R>>1;bool ok=false;for(int tm=0;tm<2;tm++){int wt=tm;int cnt=0;for(int i=0;i<N;i++){if(wt==1){wt=0;cnt++;}else if(A[i]<=M){wt=1;cnt++;}}if(cnt>=K)ok=true;}if(ok)R=M;else L=M;}printf("%d\n",R); }

總結

以上是生活随笔為你收集整理的Codeforces Round #651 (Div. 2) D的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。