差異的可分割性

2021-09-26 07:14:39 字數 997 閱讀 2859

題目鏈結

現在有n個整數,在這n個數中找出k個數,保證這k個數中任意兩個數差的絕對值可以被m整除。
input

第一行輸入三個整數n,k,m(2<=k<=n<=100000,1<=m<=100000)。 

第二行包含n個整數a1,a2,...,  an(0 <= ai <= 10^9 )。

output

如果不存在這樣的k個數,輸出"no";

否則輸出"yes"後,在下一行輸出這k個數,數與數之間用空格隔開。 (存在多種情況,輸出任意一種)。

example

input

3 2 3

1 8 4

output

yes

1 4

input

3 3 3

1 8 4

output

no
input

4 3 5

2 7 7 7

output

yes

2 7 7

思維,只要模m後的餘數相等,差就一定是m的倍數。

比如:(a-b)%p=0         a%p=m,b%p=n,,那麼m和n一定相等。

把n個整數模m的值算出來,用vector實現計數,把模m後相等的值放在一起就行了。

#include #include #include using namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const ll inf=0x3f3f3f3f3f3f3f3f;

const int maxn=1e5+10;

vectorve[maxn];

int main()

for(int i=0;i=k)

{ cout<<"yes"《涉及知識點:

1、vector實現計數,注意vector計數的時候vector必須定義成陣列形式。

揹包問題 可分割

可分割的揹包問題 即挑菜單位價值最大的物品裝入即可。寶物 i12 3456 78910 重量w i 42 9558 5455 價值v i 38 186820 56715 求裝入寶物的最大價值,以及裝入寶物的序號。include include using namespace std 需要乙個結構體,...

揹包問題(可分割)

給定乙個載重量為m的揹包,考慮n個物品,其中第i個物品的重量 wi 價值vi 1 i n 要求把物品裝滿揹包,且使揹包內的物品價值最大。如果物品可以分割,則稱為揹包問題 貪心演算法 為方便計算,建立如下的資料結構,表示物品的引數 struct baga 1001 存放物品的陣列 排序因子 按價效比降...

貪心法之可分割揹包問題

複習演算法至貪心法,書上的舉例是可分割的揹包問題。可分割揹包問題很容易理解,只需要根據收益和重量的比值進行排序,首選比值較大者填入即可,若物品種類大於剩餘載重量,則填充剩餘載重量的此物品,在剩餘載重量足夠的情況下,依次將物品填入揹包即可。這應該是揹包問題中最為簡易的了,待熬過這段時間的考試,準備好好...