codevs 1553 互斥的數

2022-04-05 02:23:26 字數 1374 閱讀 3060

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

題目描述 description

有這樣的乙個集合,集合中的元素個數由給定的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

資料範圍及提示 data size & hint

map 或 雜湊 

屠龍寶刀 點選就送

map 做法  118ms 2mb 311b

#include#include

#include

using

namespace

std;

int s[100000

];map

d;intmain()

}cout

<

}

view code

雜湊 做法 21ms 876kb 1213b

#include #include 

using

namespace

std;

struct

node

edge[

50001

];int head[50001],n,p,a[100001

],tot;

intqr()

while(ch>='

0'&&ch<='9')

return x*f;

}int get_hash1(int

k)int get_hash2(int

k)void add(int

from,int

to)void change(int u,int

v) }

}int pd(int u,int

v)

return

false;}

intmain()

sort(a,a+n);

int h=0,ans=n;

for(int i=0;ii)

}printf(

"%d\n

",h);

return0;

}

view code

CODEVS 1553 互斥的數

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

互斥的數(codevs 1553)

題目描述 description 有這樣的乙個集合,集合中的元素個數由給定的n決定,集合的元素為n個不同的正整數,一旦集合中的兩個數x,y滿足y p x,那麼就認為x,y這兩個數是互斥的,現在想知道給定的乙個集合的最大子集滿足兩兩之間不互斥。輸入描述 input description 輸入有多組資...

1553 互斥的數

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