整除?遞推罷了!YBT1195

2021-08-11 16:52:54 字數 1826 閱讀 3189

剛從外面回家,突然發現家裡的電腦沒關。於是條件反射的開啟oj,想刷一道題目,那就看看生成的隨機數是多少吧!

好的,進入題目1195

判斷整除

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 449 通過數: 131

【題目描述】

乙個給定的正整數序列,在每個數之前都插入+號或-號後計算它們的和。比如序列:1、2、4共有8種可能的序列:

(+1) + (+2) + (+4) = 7

(+1) + (+2) + (-4) = -1

(+1) + (-2) + (+4) = 3

(+1) + (-2) + (-4) = -5

(-1) + (+2) + (+4) = 5

(-1) + (+2) + (-4) = -3

(-1) + (-2) + (+4) = 1

(-1) + (-2) + (-4) = -7

所有結果中至少有乙個可被整數k整除,我們則稱此正整數序列可被k整除。例如上述序列可以被3、5、7整除,而不能被2、4、6、8……整除。注意:0、-3、-6、-9……都可以認為是3的倍數。

【輸入】

輸入的第一行包含兩個數:n(2

<10000)和k(2

100),其中n代表一共有n個數,k代表被除數。第二行給出序列中的n個整數,這些整數的取值範圍都0到10000之間(可能重複)。

【輸出】

如果此正整數序列可被k整除,則輸出yes,否則輸出no。(注意:都是大寫字母)

【輸入樣例】32

124【輸出樣例】

no

看到這道題目,第乙個想法是利用遞推,求到一組資料就判斷一組。不難發現,只要某個值的絕對值為k的倍數,那麼這個值一定也是k的倍數

第一波**

#include

#include

#include//提交的時候忘了這句話,編譯錯誤了

#include

using

namespace

std;

int n,k,a[10001],b[10001];//b用來儲存結果

void place()

void dfs(int h)//遞推

} int main()

結果..

我就猜到肯定要timeout!!(why are there 20 test data?)

沒有想法。。苦思冥想ing。

遞推遞推,放在主程式裡遞推會不會更好呢?但是說是這麼說,沒想法。。

裡的**瞄了一眼,心裡有數了。

大概就是乙個狀態壓縮動態dp吧。推翻源**,改了挺久的。。

#include

#include

#include

#include

using

namespace

std;

int n,k,x;int f[2][111],b,flag;//f只有兩個狀態,正或負

int _abs(int x)//mod函式

int main()

if(f[!b][0]) printf("yes");

else

printf("no");

}

get試一試

順利ac!

總結:借鑑他人的**長處,形成獨樹一幟的**風格,並盡量簡化時間複雜度!

特別鳴謝:

判斷整除 動態規劃,遞推

總時間限制 1000ms 記憶體限制 65536kb 描述 乙個給定的正整數序列,在每個數之前都插入 號或 號後計算它們的和。比如序列 1 2 4共有8種可能的序列 1 2 4 7 1 2 4 1 1 2 4 3 1 2 4 5 1 2 4 5 1 2 4 3 1 2 4 1 1 2 4 7 所有結...

VB判斷整除並整除

private sub command1 click dim m as integer,n as integer,d as integer dim s as long 儲存結果 m val text1.text n val text2.text d val text3.text s 0 sum m,...

python3 整除 python如何整除

python 的除法運算子有兩個 表示普通除法,使用它除出來的結果與平常數學計算的結果是相同的 即除不盡時,會產生小數部分 而 表示整除,使用它除出來的結果只有整數部分,小數部分將會被捨棄。記住,在 python 3.x 中,除法運算的結果都是浮點型別。例如如下 print 19 4的結果是 19 ...