Codevs 1533互斥的數 hash

2021-07-30 03:14:16 字數 734 閱讀 7017

題目大意:

給定n個不同的數和p,要求選擇盡可能多的數,使得選擇的數中,任意兩個大的都不是小的p倍。

數值<=1e9。

題解:首先排個序。然後從小到大考慮每個數字,如果當前數字沒有被「排斥」,就cnt++,並把它排斥的(即比他大的且是它p倍)數排斥走。

最後cnt就是答案。

如果不用map的話辣不就是hash麼。

然而並不想寫雙hash,一開始mod用的1e5+3,全wa

後來改為1e6+7,wa四個

後來改為1e8+3,wa乙個

後來改為102030405,就ac了啊啊23333333336666666666..........

hash**如下:

#include#include#include#define maxn 100010

#define mod 102030405

#define ull unsigned long long int

using namespace std;

int a[maxn];

bool hash[mod+5];

int main()

sort(a+1,a+n+1);

int cnt=0;

for(int i=1;i<=n;i++)

if(hash[a[i]%mod])

printf("%d\n",cnt);return 0;

}

CODEVS 1553 互斥的數

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

codevs 1553 互斥的數

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

互斥的數(codevs 1553)

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