時間限制: 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#includeview code#include
using
namespace
std;
int s[100000
];map
d;intmain()
}cout
<
}
雜湊 做法 21ms 876kb 1213b
#include #includeview codeusing
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;
}
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這兩個數是互斥的,現在想知道給定的乙個集合的最大子集滿...