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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CodeForces 931CLaboratory Work 水题,构造

發布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces 931CLaboratory Work 水题,构造 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

*這種題好像不用寫題解...

題意:

  一個人要改動別人的實驗記錄,實驗記錄記錄是一個集合

   實驗記錄本身滿足:$max(X)-min(X)<=2$

   改動結果要求:

    1.新的集合平均值和之前的一樣

    2.新的集合,$max(Y)<=max(X),min(Y)>=min(X)$

   求新一個和之前相同數值最少的新記錄

題解:

  首先考慮不同情況,

  如果$max-min<=1$ :因為要保證平均值且值域受限制不變,無法改變值(增加一個值之后,要相應的把另外一值減小,而數值只有2/1種,改動沒有意義)

  如果$max-min=2$ 我們把所有值分為 $max,mid,min$ 三類那么就有了2種選擇:

  1.把所有的$mid$兩兩分組 變成$max,min$

  2.把所有的$max,min$兩兩組合,變成$mid$

  我們比較一下誰比較就行了...

? ? ? ? 1A

#include <bits/stdc++.h> #define ll long long #define rep(ii,a,b) for(int ii=a;ii<=b;ii++) using namespace std; const int maxn=1e5+10; int casn,n,m,k; int num[maxn]; int cnt[3]; int main(){rep(i,1,n) cin>>num[i];sort(num+1,num+1+n);rep(i,1,n)cnt[num[i]-num[1]]++;ll ans1=cnt[2]+cnt[0]+cnt[1]%2;ll ans2=max(cnt[2],cnt[0])-min(cnt[2],cnt[0])+cnt[1];ll ans=min(ans1,ans2);if(num[n]-num[1]<=1) ans=n;else if(ans1<ans2){cnt[0]+=cnt[1]/2;cnt[2]+=cnt[1]/2;cnt[1]%=2;}else {cnt[1]+=2*min(cnt[0],cnt[2]);if(cnt[2]>cnt[0]) {cnt[2]-=cnt[0];cnt[0]=0;}else{cnt[0]-=cnt[2];cnt[2]=0;}}cout<<ans<<endl;while(cnt[0]--) cout<<num[1]<<' ';while(cnt[1]--) cout<<num[1]+1<<' ';while(cnt[2]--) cout<<num[1]+2<<' ';return 0; }

轉載于:https://www.cnblogs.com/nervendnig/p/9236681.html

總結

以上是生活随笔為你收集整理的CodeForces 931CLaboratory Work 水题,构造的全部內容,希望文章能夠幫你解決所遇到的問題。

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