題解 P1373 奶牛的臥室

2021-08-02 12:13:50 字數 1279 閱讀 4296

p1373 奶牛的臥室

2023年6月12日

奶牛們有乙個習慣,那就是根據自己的編號選擇床號。如果一頭奶牛編號是a,並且有0..k-1一共k張床,那麼她就會選擇(a mod k)號床作為她睡覺的地點。顯然,2頭牛不能睡在一張床上。那麼給出一些奶牛的編號,請你為她們準備一間臥室,使得裡面的床的個數最少。

【分析】

本題要求的,就是找乙個最小的數m,使得任意兩個數x,y,滿足:

(x mod m) != (y mod m).

根據結論:

當((x - y) mod m) != 0,則有:(x mod m) != (y mod m).

證明:

設:a % m = b % m = k,

則:a = p1 * m + k; b = p2 * m + k.

(a - b) = (p1 - p2) * m,(a - b) mod m = 0.

用反證,可以證明結論正確。

所以本題是找乙個最小的數,這個數應滿足不是任何兩個數的差的約數。

【過程】

本題的思路是將任意兩個數的差的絕對值記錄下來,並求出他們的所有約數,那麼最小的乙個不是約數的數就是本題所求的數。

但是因為資料量太大,o=n*max(5000*1000000),所以將所有差的約數記錄下來不現實,所以可以採取邊記錄邊尋找的方法。將所有的差記錄下來,從n開始到最大的num[n],按順序尋找,如果這個數是任意差的約數,break並檢查下乙個數。

根據抽屜原理,所求的數字最小是n,最大是num[n].

【** c++】

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxx 10000010

int n;

int num[5100], ans = 0;

bool recalls[maxx];

//記錄任意兩個數的差

int main()

if(recalls[i] == true)}}

return

0;}

p1373 奶牛的臥室

描述 description 奶牛們有乙個習慣,那就是根據自己的編號選擇床號。如果一頭奶牛編號是a,並且有0.k 1一共k張床,那麼她就會選擇a mod k號床作為她睡覺的地點。顯然,2頭牛不能睡在一張床上。那麼給出一些奶牛的編號,請你為她們準備一間臥室,使得裡面的床的個數最少。輸入格式 input...

P1373 小a和uim之大逃離

小a和uim來到雨林中探險。突然一陣北風吹來,一片烏雲從北部天邊急湧過來,還伴著一道道閃電,一陣陣雷聲。剎那間,狂風大作,烏雲布滿了天空,緊接著豆大的雨點從天空中打落下來,只見前方出現了乙個披頭散髮 青面獠牙的怪物,低沉著聲音說 呵呵,既然你們來到這,只能活下來乙個!小a和他的小夥伴都驚呆了!瞬間,...

P1373 小a和uim之大逃離

題目描述 瞬間,地面上出現了乙個n m的巨幅矩陣,矩陣的每個格仔上有一坨0 k不等量的魔液。怪物各給了小a和uim乙個魔瓶,說道,你們可以從矩陣的任乙個格仔開始,每次向右或向下走一步,從任乙個格仔結束。開始時小a用魔瓶吸收地面上的魔液,下一步由uim吸收,如此交替下去,並且要求最後一步必須由uim吸...