傳送門
一共有n
nn個數,已知有k
kk對數的和為正數
問最多有多少對數的乘積為正數
因為要使得積為正數的對數盡可能的多,所以我們原本的數應該都是些非零的數
這樣我們設有x
xx個正數,就會有n−x
n-xn−
x個負數
此時積為正數的對數為x∗(
x−1)
2+(n
−x)∗
(n−x
−1)2
\frac+\frac
2x∗(x−
1)+
2(n−
x)∗(
n−x−
1)所以顯然我們要使得兩項中的任意乙個盡可能的大,所以我們可以二分x
xx的最大值和最小值,在兩者中取最大值作為答案
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace std;
inline ll read()
while
(c>=
'0'&&c<=
'9')
return s*f;
}ll n=
read()
,k=read()
;ll get
(ll x)
intmain()
l=0;r=n;ll a2=-1
;while
(l<=r)
cout<<
max(a1==-1
?-1:
get(a1)
,a2==-1
?-1:
get(a2));
return0;
}
猜數字遊戲,二分查詢 ,輸密碼遊戲
1.完成猜數字遊戲 首先這個 要先理解他如何猜數字。不可能是在 中寫乙個數,你來猜它吧。所以你得有乙個可以產生隨機數的函式。也就是rand 所以接下來就好寫了。只要通過迴圈比較來告訴它值低了 還是 高了 我是通過函式來實現的,乙個輸出函式,乙個遊戲函式。結合起來。define crt secure ...
猜數字遊戲 二分查詢顯威力
規則就像剛才說的一樣,現在開始猜數字,假設待猜數字為57,讓我們先用之前的猜法試一下,乙個乙個猜,從1開始,這樣猜的話,最少得猜57次,6要是99的話,得猜99次,現在讓我們試一下從中間開始的猜法。從50開始,則猜數過程如下 50 小了 75 大了 63 大了 57 猜對了 從以上過程可以看出,從中...
1 猜數字遊戲 2 二分查詢 3 模擬使用者登入
猜數字遊戲 void eumn void game else if num tem else intmain else if choice 0 else while 1 system pause return0 二分查詢,找到了返回該數字的下標 intbinarysearch int arr,int...