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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces 1012A Photo of The Sky

發布時間:2025/4/9 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 1012A Photo of The Sky 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為一個蒟蒻,\(\tt{CF}\)止步\(Div.2\;C\)

這個題主要考察思維,正解代碼炒雞短……

以下大部分搬運自官方題解


題目大意:

給你一段長度為\(2n\)的數列,將這個數列分為兩個可重集,每個集合有\(n\)個元素,使得這兩個集合的極差之積最小,輸出這個最小值

題解:

假設輸入的數組為\(a[2n]\),為了方便,我們把要分成的兩個可重集叫做\(X\)\(Y\)

首先肯定要先\(sort\)一下,使得數組有序,方便操作(下文提到的數組都是有序的)

接下來就是分類討論了:

  • 第一種情況:數組a的最大值和最小值都在\(X\)里。那么\(X\)的極差就是\(a[2n]-a[1]\),接下來我們要使\(Y\)的極差盡量小,我們就需要枚舉一下每個元素\(a[i]\),因為集合里要有\(n\)個元素,所以對于每個\(a[i]\),能使\(Y\)的極差最小的方式就是將\(a[i]\)~\(a[i+n-1]\)全部放到\(Y\)里,所以\(Y\)的極差就是\(\min(a[i+n-1]-a[i])\;i\in [2,n+1]\)
    答案為 \(\min((a[i+n-1]-a[i])\cdot(a[2n]-a[1]))\;i\in [2,n+1]\)

  • 第二種情況:最大值和最小值分別在\(X\)\(Y\)里。這樣我們就要使\(X\)的最大值最小,\(Y\)的最大值最大,那么\(X\)的極差就為\(a[n]-a[1]\)\(Y\)的極差為\(a[2n]-a[n+1]\)
    答案為 \((a[n]-a[1])\cdot (a[2n]-a[n+1])\)

最終的答案從這兩種情況中取一個最小值就好了。

時間復雜度\(O(nlogn)\)(也就是排序的復雜度)

最后提醒一句:別忘了開\(\mathfrak{long\;long}\)

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; int read(){int k=0; char c=getchar();for(;c<'0'||c>'9';) c=getchar();for(;c>='0'&&c<='9';c=getchar())k=(k<<3)+(k<<1)+c-48;return k; } ll a[100010<<1],ans; int main(){int n=read();for(int i=1;i<=n<<1;i++) a[i]=read();sort(a+1,a+(n<<1)+1);ans=(a[n]-a[1])*(a[n<<1]-a[n+1]); //第二種情況for(int i=2;i<=n+1;i++) //第一種情況ans=min((a[n<<1]-a[1])*(a[i+n-1]-a[i]),ans);cout<<ans;return 0; }

轉載于:https://www.cnblogs.com/wxl-Ezio/p/9395060.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的Codeforces 1012A Photo of The Sky的全部內容,希望文章能夠幫你解決所遇到的問題。

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