wikioi1553 互斥的數

2021-07-26 12:59:55 字數 724 閱讀 7546

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

題解

有這樣的乙個集合,集合中的元素個數由給定的n

決定,集合的元素為

n個不同的正整數,一旦集合中的兩個數

x,y滿足

y = p*x

,那麼就認為

x,y這兩個數是互斥的,現在想知道給定的乙個集合的最大子集滿足兩兩之間不互斥。

輸入描述 input description

輸入有多組資料,每組第一行給定兩個數n和p

(1<=n<=10^5, 1<=p<=10^9

)。接下來一行包含

n個不同正整數ai(

1<=ai<=10^9)。

輸出描述 output description

輸出一行表示最大的滿足要求的子集的元素個數。

樣例輸入 sample input

4 21 2 3 4

樣例輸出 sample output

3題解:將所有數從小到大排序。對於x和p*x,刪去p*x一定最優,因為x和p*x*x都可以合法

#include#include#includeusing namespace std;

const int maxn=100010;

int n,m,ans,a[maxn];

maphash;

int main()

cout<

wikioi 1553 互斥的數

題目大意 給定n 和 p,規則 if x y p 那麼x 與 y 互斥。找出最大的集合,每個元素兩兩不互斥。思路 既然x p 和 y 互斥,那麼,如果有a i 滿足a i p 和 a i 互斥,就刪掉a i p。因為如果刪除a i p 會使a i p p 可以存在於集合中,所以刪a i p 一定不會...

1553 互斥的數

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解檢視執行結果 description 有這樣的乙個集合,集合中的元素個數由給定的n決定,集合的元素為n個不同的正整數,一旦集合中的兩個數x,y滿足y p x,那麼就認為x,y這兩個數是互斥的,現在想知道給定的乙個集合的最大子集滿...

CODEVS 1553 互斥的數

有這樣的乙個集合,集合中的元素個數由給定的n決定,集合的元素為n個不同的正整數,一旦集合中的兩個數x,y滿足y p x,那麼就認為x,y這兩個數是互斥的,現在想知道給定的乙個集合的最大子集滿足兩兩之間不互斥。輸入有多組資料,每組第一行給定兩個數n和p 1 n 10 5,1 p 10 9 接下來一行包...