剛從外面回家,突然發現家裡的電腦沒關。於是條件反射的開啟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 ...