關於二分法左右端點的可能出現的問題

2021-10-21 02:40:35 字數 859 閱讀 3427

關於二分法左右端點的可能出現的問題。

最好根據題目設定左右端點的值,而不是直接使用0至資料範圍最大值,否則可能出現問題。

例題**於洛谷:p1182 數列分段 section ii 題目鏈結

**如下:

#include

using

namespace std;

typedef

unsigned

long

long ll;

const

int maxv=

100100

;const

int mod=

100000

;int a[maxv]

;bool

judge

(int val,

int n,

int m)

len+

=a[i];}

if(len) num++

;return num<=m;

}int

binarysearch

(int left,

int right,

int m,

int n)

return left;

}int

main()

printf

("%d"

,binarysearch

(left,right,m,n));

return0;

}

很明顯,左端點應該設定成每個數列的最大值,而不能直接用1或者0。比如n=5,m=5,a[5]=就會出現1或0的值符合要求的情況,實際上該值根本無法將數列分割,故無法達到要求。

分析如上,歡迎討論。

可能的二分法

給定一組 n 人 編號為 1,2,n 我們想把每個人分進任意大小的兩組。每個人都可能不喜歡其他人,那麼他們不應該屬於同一組。形式上,如果 dislikes i a,b 表示不允許將編號為 a 和 b 的人歸入同一組。當可以用這種方法將所有人分進兩組時,返回 true 否則返回 false。示例 1 ...

886 可能的二分法

題目描述 示例 1 輸入 n 4,dislikes 1,2 1,3 2,4 輸出 true 解釋 group1 1,4 group2 2,3 示例 2 輸入 n 3,dislikes 1,2 1,3 2,3 輸出 false 示例 3 輸入 n 5,dislikes 1,2 2,3 3,4 4,5 ...

886 可能的二分法

給定一組 n 人 編號為 1,2,n 我們想把每個人分進任意大小的兩組。每個人都可能不喜歡其他人,那麼他們不應該屬於同一組。形式上,如果 dislikes i a,b 表示不允許將編號為 a 和 b 的人歸入同一組。當可以用這種方法將所有人分進兩組時,返回 true 否則返回 false。impor...