傳送門
d: 快速冪, 理解到原理, 然後寫個2, 2判斷下應該怎麼走即可
ans: int res = pw(x, y>>1, p) * pw(x, y>>1, p) % p;
e: 因為產生0的原因只能值2 和 5的結合, 有乙個結合就會多乙個零, 但是我們可以注意到2的數量比5的多很多, 所以直接數n!的階乘會產生多少個5即可…..
ans: ans += n/=5;
f: 這道題才拿著的時候有點懵逼, 因為我想的是全排列列舉所有情況但是這個由於是圖的原因有點難寫, 就沒寫了, 實際上這tm就是撿鑰匙開門的減弱版本啊, 居然沒想起, 這不就是撿10把鑰匙然後回到某點的最少時間, 而且還不帶開門的, 這不是很好寫嗎? 直接狀壓模擬撿鑰匙, 然後bfs即可, 注意標記. vis[i][j][1<<10] 用這個來標記當前我們是怎樣遍歷過這個(i, j)點的. 因為撿了寶藏1到(i, j)和撿了寶藏2到(i, j)是不一樣的.
ac code
const
int maxn = 1e3+5;
char s[maxn][maxn];
int dx = ;
int dy = ;
int d[50][50][1
<<10], vis[50][50][1
<<10];
struct node ;
int n;
void bfs(int sx, int sy, int k) );
vis[sx][sy][k] = 1;
while(!q.empty())
vis[xx][yy][kk] = 1;
d[xx][yy][kk] = u.step + 1;
q.push(node);}}
cout
<< d[sx][sy][(1
<<10)-1] << endl;
}void solve()
bfs(1, 1, 0);
}
這道題的圖 : ans = 48;
g: 直接用棧模擬操作即可. (想起這些stl啊, 很好用的!!!)
ac code
const
int maxn = 1e5+5;
int a[maxn];
void solve()
while(top && a[top] - x == 1)
if (x - a[top] == 1) ++ ans;
else a[++top] = x;
}cout
<< ans << endl;
}
j: 一道經典dp.
設dp[i][j] 代表 i 劃分為不多於j個正整數的劃分數
所以:
(1) 當 i == 1 || j == 1時, dp[i][j] = 1; 前面為只有1這個情況, 後面為劃分為自身的情況.
(2) 當 i == j 時, dp[i][j] = dp[i][j-1] + 1; 表示將i劃分為不多於j-1個的方案數, + 全是1組成i的情況.
(3) 當 i < j 時, 沒有多餘方案, dp[i][j] = dp[i][i];
(4) 當 i > j 時, 分兩種齊情況, 一是如果這不多於j個正整數中有1,那麼可以將這個1合併到任意乙個數字中, 也就是求i 劃分為不多於j-1個正整數的方案, 而是如果 這不多於j個正整數中沒有1, 那麼可以利用截邊法將每乙個數字截去1, 那麼就是求截去1的方案數也就是dp[i-j][j]; 所以轉移方程為:
dp[i][j] = dp[i][j-1] + dp[i-j][j];
ac code
const
int maxn = 3e2+5;
ll dp[maxn][maxn];
void solve()
}cout
<< dp[n][k] << endl;
}
計蒜客2020 藍橋杯省賽 B 組模擬賽(一)
1 有趣的數字 題目描述 我們稱乙個數是質數,而且數字 現了 55 的數字是有趣的。例如 5,59,4575,59,457 都是有趣的,而 15,715,7 不是。求 11 到 100000100000 中有趣的數的個數。思路 這道題就是判斷質數,和分解數字,通過for迴圈對1 100000的每乙個...
2020 計蒜客藍橋杯B 組模擬賽(一) 迷宮
2020 計蒜客藍橋杯b 組模擬賽 一 迷宮 用bfs佇列實現 include define maxn 1005 define maxm 1005 define maxq 105 using namespace std typedef pair int,int pii char mmap maxn ...
計蒜客2020藍橋杯B組省賽模擬(一)C題
我今天逛部落格的時候才發現有模擬賽,雖然我不太喜歡計蒜客。不過還是題目重要一些。原本想寫個總的。有些題目我也不太確定。還是算了把。數論題結果填空題,平面分割,遞推問題,也簡單,原先寫過。傳送門 參考部落格 這裡附上適合本題的解題思路 規律 f n f n 1 n f n n n 1 2 1 f 0 ...