第二次做蓝桥模拟赛的博客记录,可能有很多不足的地方,如果大佬有更好的思路或者本文中出现错误,欢迎分享思路或者提出意见
答案:6,试除法暴力枚举即可
答案:4186,简单的双循环枚举
答案:5503,循环内套一个判定质数的函数就行了
答案:344,同余定理或者高精度除法都OK
思路:二维前缀和找最大子矩阵板子,核心代码如下
for (int i = 1; i <= 30; ++i) {
for (int j = 1; j <= 20; ++j) {
cin >> x;
sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + x;
}
}
for (int i = 5; i <= 30; ++i) {
for (int j = 5; j <= 20; ++j) {
res = max(res, sum[i][j] - sum[i][j - 5] - sum[i - 5][j] + sum[i - 5][j - 5]);
}
}
答案:171248
#include<iostream>
using namepspace std;
int main(){
int n;
cin >> n;
n = (n % 3 == 0) ? (n / 3) : (n / 3 + 1);
cout << n;
}
#include<iostream>
using namepspace std;
int main(){
string s;
cin >> s;
int res{};
for (char c : s) {
if ((c - '0') % 2 == 1)
res++;
}
cout << res;
}
这俩题太简单了咱们过咯
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> a(n);
for (int i = 0;i<n;i++)
cin >> a[i];
int max_ = 0,min_ = 1e5 + 10;
for (int i = 1; i < n - 1; ++i) {
if (a[i] < a[i - 1] && a[i] < a[i + 1] && a[i] > max_)
max_ = a[i];
if (a[i] > a[i - 1] && a[i] > a[i + 1] && a[i] < min_)
min_ = a[i];
}
return 0;
}
#include <iostream>
using namespace std;
const int N = 1e3 + 10;
char a[N][N];
int m, n, res;
int func(int x, int y) {
int cnt = 0;
for (int i = 1;; i++) {
if (x - i < 0 || y - i < 0 || x + i >= n || y + i >= m) {
return cnt;
}
if (a[x][y] == a[x - i][y - i] && a[x][y] == a[x - i][y + i] && a[x][y] == a[x + i][y]) {
cnt++;
} else {
return cnt;
}
}
}
int main() {
cin >> m >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
for (int i = 1; i < n - 1; i++) {
for (int j = 1; j < m - 1; j++) {
res = max(func(i, j), res);
}
}
cout << res;
return 0;
}
三个方向同时判断,记录长度
经典的台阶问题,小变种了一下下,理论上算线性dp
#include <iostream>
#include <vector>
using namespace std;
const int mod = 1e9 + 7;
int main()
{
int n, a, b, c;
cin >> n >> a >> b >> c;
vector<int> dp(n + 1);
dp[0] = 1;
for (int i = a; i <= n; i++) {
dp[i] = (dp[i] + dp[i - a]) % mod;
if (i >= b)
dp[i] = (dp[i] + dp[i - b]) % mod;
if (i >= c)
dp[i] = (dp[i] + dp[i - c]) % mod;
}
cout << dp[n];
return 0;
}