時間限制:4000ms 記憶體限制:65535k
提交次數:0 通過次數:0
題型: 程式設計題 語言: g++;gcc
小明的密碼由n(1<=n<=12)個數字構成,每個數字都可以是0至9中任意乙個數字,但小明的密碼還有乙個特點就是密碼中連續的m(1<=m<=4)個數字的和是質數,現給定m和n,求滿足條件的密碼共有多少
個?
第1行是t,case數量,此後t行,每行兩個數,n和m
每個case輸出乙個滿足條件的密碼總數
21 12 1
4admin16
scau 小明的密碼—深度優先搜尋(dfs)。應該說是暴力深搜(700ms過了...題目對時間的限制已經是很水的了...);我的做法是邊生成邊測試, 是 連續m段的生成。在dfs()函式裡加乙個引數sum記錄前面m-1個密碼的總和。 如果當前訪問的位置pos是小於m的,則在該位置迴圈放置0~9,然後進入下一層dfs。如果大於等於m了, 也在該位置迴圈放置0~9並判斷sum+i是否為素數,如果是 則進入下一層dfs,且將引數sum改為sum+i-a[pos-m+1]; 即sum加上當前位置的數字後再減去這m段密碼的首位置的數字。 所以,概括的來說就是在不停的維護乙個長度為m的區間的數字總和,sum記錄最新的m-1個連續數字的和,然後判斷當前位置(也就是這個連續m段的最後乙個位置)的數字需要為什麼時能使這個m段總和為素數。 在進入下一層dfs前,得把這個位置的數字加到sum裡去,再減去剛剛得到的這個長度為m的段的首個數字,於是又得到乙個m-1段的總和,然後在下一層dfs裡判斷下個位置為多少時能和這個m-1個數字的和組成素數.....以此遞推下去,,, 感覺這題的解釋自己講的好囉嗦,而且表達的也並不清楚,看**吧
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include9 #include 10 #include 11 #include 12 #include 13 #include 14
#define ll long long
15#define inf 0x3f3f3f3f
16using
namespace
std;
1718
//得出素數表 (素數篩選法)
19bool prime[56
];20
void get_prime()//
m最大為4,所以篩選出前50素數足矣了。
2132
//33
int a[20];//
陣列a用來存放密碼
34int
cnt,n,m;
35void dfs(int pos,int
sum)
3644
if(pos//
如果當前檢驗的密碼段還不到m長度
4551}52
else
5361}62
}63}64
intmain()
6577
return0;
78 }
小明的難題
時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小明正在學習字串,他在書上見到了乙個問題 給你乙個字串 s,對於 s 中下標為偶數的字元 ci 如果 ci 是小寫字母,就將它變成大寫,否則,不改變。最後輸出操作後的字串 s。輸入 第一行輸入乙個整數 n,代表有 n 組測試資料...
無聊的小明
描述 這天小明十分無聊,沒有事做,但不甘於無聊的小明聰明的想到乙個解決無聊的辦法,因為他突然對數的正整數次冪產生了興趣。眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,2,4,8,6 我們說2的正整數次冪最後一位的迴圈長度是4 實際上4的倍數都可以說是迴圈長度,但我們只考慮最小的迴...
開心的小明
描述 小明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早小明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每件物品規定了乙個重要...