51nod 1103 N的倍數 抽屜原理

2021-07-22 09:47:14 字數 986 閱讀 6341

原題鏈結

1103 n的倍數

ural 1302

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 

難度:4級演算法題

乙個長度為n的陣列a,從a中選出若干個數,使得這些數的和是n的倍數。

例如:n = 8,陣列a包括:2 5 6 3 18 7 11 19,可以選2 6,因為2 + 6 = 8,是8的倍數。

input

第1行:1個數n,n為陣列的長度,同時也是要求的倍數。(2 <= n <= 50000)

第2 - n + 1行:陣列a的元素。(0 output

如果沒有符合條件的組合,輸出no solution。

第1行:1個數s表示你所選擇的數的數量。

第2 - s + 1行:每行1個數,對應你所選擇的數。

input示例

825

63187

1119

output示例

2

26

遍歷陣列num中的每乙個數,求字首和p, 

1若p % n == 0則直接輸出組成字首和的這些元素.

2.假如沒有出現p % n == 0, 因為有n個元素,p % n 取值範圍為1..n-1所有必有兩個字首和pi % n == pj % n(j > i)那麼num[i+1] + ..num[j]必為n的倍數.

#include #include #include #include using namespace std;

typedef long long ll;

int num[50005], vis[50005];

int main()

return 0;

} if(vis[p])

vis[p] = i;

} puts("no solution");

return 0;

}

51nod 1103 N的倍數 (抽屜原理)

乙個長度為n的陣列a,從a中選出若干個數,使得這些數的和是n的倍數。例如 n 8,陣列a包括 2 5 6 3 18 7 11 19,可以選2 6,因為2 6 8,是8的倍數。input 第1行 1個數n,n為陣列的長度,同時也是要求的倍數。2 n 50000 第2 n 1行 陣列a的元素。0 a i...

51nod 1103 N的倍數(抽屜定理)

題目 思路 首先明確,輸出任意乙個答案即可 求mod n的字首和,然後如果0就是答案,如果沒有等於0的,考慮mod n結果只能是1 n 1,所以根據抽屜定理 鴿巢定理 若把n個物體放在n 1個抽屜中,至少有乙個抽屜中放了兩個物體 所以肯定有兩個相同的字首和,相減就是結果了 include using...

51nod 1103 N的倍數 抽屜原理

這題是特判,所以找到任何乙個結果都可,有這麼幾種情況 a i 即為n的倍數,那麼輸出1和a i 即可 一直求和直到對n取模後為0,那麼從頭輸出到i即可 非從頭的幾個數求和為n的倍數,我們講一下3情況的實現 我們用字首和,把每次讀入的數加到字首和中,並對字首和取模,由於一直加為取模後為0的情況在2討論...