解題思路:
首先對每個數進行去模,這樣得到的數就會是[0,p-1]的範圍,接下來就是如何組合的問題了。
這裡要考慮到模的性質了,假設取的兩個數分別為i,j,其中i >= j,如果當前數i>(p-1)/2,那麼就會出現兩種情況:
1)j>(p-1)/2,這樣算出來的結果必定是i+j-p,i和j肯定都要盡可能大;
2)j<(p-1)/2,這樣算出來的結果必定是i+j,那麼我選擇的j肯定要盡可能的接近(p-1)/2。
如果當前的數i<(p-1)/2,那麼選擇的j同樣是要接近於(p-1)/2。
以上的分析當中選擇最大的即可。
#include#include#include#includeusing namespace std;
const int maxn = 100005;
int n,p,pos,a[maxn];
int main()
sort(a+1,a+1+n);
int tmp = (p - 1) >> 1;
pos = n;
for(int i = 1; i <= n; i++) //找到最後乙個小於等於(p-1)/2的位置
if(a[i] > tmp)
int ans = 0;
for(int i = 2; i <= n; i++)
}printf("%d\n",ans);
} return 0;
}
HDU 6012 列舉 二分
問題描述 這幾天lotus對培養盆栽很感興趣,於是她想搭建乙個溫室來滿足她的研究慾望。lotus將所有的n n株盆栽都放在新建的溫室裡,所以所有盆栽都處於完全相同的環境中。每一株盆栽都有乙個最佳生長溫度區間 l,r l r 在這個範圍的溫度下生長會生長得最好,但是不一定會提供最佳的研究價值 lotu...
瘋牛(二分列舉)
描述 農夫 john 建造了一座很長的畜欄,它包括n 2 n 100,000 個隔間,這些小隔間依次編號為x1,xn 0 xi 1,000,000,000 但是,john的c 2 c n 頭牛們並不喜歡這種布局,而且幾頭牛放在乙個隔間裡,他們就要發生爭鬥。為了不讓牛互相傷害。john決定自己給牛分配...
poj 3273 二分列舉
題意 給出乙個有n個資料的陣列,將其分為連續的m份,找到一種分法,是的m份中最大乙份總和最小 參考部落格 題解 一種方案中最大的那部分總和num存在乙個範圍,num總大於等於陣列中最大的那個數,總小於等於整個陣列的和。得到了乙個範圍a b,用二分法不斷縮小範圍,比如第一次取mid a a b 2,那...