目录
试题A:美丽的2(5分)题解
试题B:扩散(5分)题解
试题C:阶乘约数(10分)题解
试题D:本质上升序列(10分)题解
试题E:玩具蛇(15分)题解
试题G:游园安排(20分)题解
试题A:美丽的2(5分)
【问题描述】 小蓝特别喜欢 2, 今年是公元 2020 年, 他特别高兴。 他很好奇, 在公元 1 年到公元 2020 年(包含)中, 有多少个年份的数位中包含数字 2?
【答案提交】 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。
题解
答案:563
#include
using namespace std;
typedef long long ll;
const int INF = 1e9;
const int maxn = 1e5;
int cnt;
bool have2(int x){
while(x != 0){
if(x % 10 == 2){
return true;
}
x /= 10;
}
return false;
}
int main(){
int x;
for(int i = 1; i
cnt++;
}
}
cout {-1, 0}, {0, -1}, {1, 0}, {0, 1}};
bool vis[maxn][maxn];
int cnt;
int main(){
nds[0] = e{0, 0, 0}, nds[1] = e{2020, 11, 0}, nds[2] = {11, 14, 0}, nds[3] = e{2000, 2000, 0};
for(int i = 0; i
e now = q.front(); q.pop();
// printf("x = %d, y = %d, step = %d\n", now.x, now.y, now.step);
if(now.step == 2021){
break;
}
vis[now.x][now.y] = true; //标记 first 4 points
cnt++;
for(int i = 0; i
vis[nx][ny] = true; //【一定要在这里标记 否则运行时间就爆炸了】
q.push(e{nx, ny, now.step + 1});
}
}
}
cout
if(x % i == 0){
return false;
}
}
return true;
}
int main(){
for(int x = 2; x //素数表的index
if(t == 1) break;
while((t % prime[i]) == 0){
Hash[i]++;
t /= prime[i];
}
}
}
for(int i = 0; i
ans *= (Hash[i] + 1);
}
}
cout
string tmp = ""; //要分两步 不能直接 string tmp = "" + str[i];(可能是因为string要先声明这个变量 再使用它的+特性)
tmp += str[i];
if(s.find(tmp) == s.end()){
s.insert(tmp);
vec[i].push_back(tmp);
}
}
for(int i = 1; i
if(str[j] //遍历vec[j]的每个字符串
string tmp = vec[j][k];
if(s.find(tmp + str[i]) == s.end()){
s.insert(tmp + str[i]);
vec[i].push_back(tmp + str[i]);
}
}
}
}
}
cout 0, -1}, {1, 0}, {0, 1}};
bool in(int x, int y){
return x >= 0 && x = 0 && y
ans++;
return;
}
vis[x][y] = true;
for(int i = 0; i
dfs(nx, ny, step + 1);
}
}
vis[x][y] = false;
}
int main(){
cin >> K;
for(int i = 0; i
memset(vis, 0, sizeof(vis));
dfs(i, j, 0);
// printf("i = %d, j = %d, ans = %d\n", i, j, ans);
}
}
cout
i++; j++;
}
if(s1[i] >= 'a' && s2[j] >= 'a' || s1[i] // 一个大写一个小写
return s1[i]
int j = i + 1;
if(s[i]
j++;
}
}
string tmp = s.substr(i, j - i);
ss[cnt++] = tmp;
i = j;
}
//dp初始化
for(int i = 0; i
for(int j = 0; j
if(dp[j] + 1 > dp[i]){
dp[i] = dp[j] + 1;
v[i] = v[j] + ss[i];
if(dp[i] > ansl){
ansl = dp[i];
anss = v[i];
}
}
else if(dp[j] + 1 == dp[i]){ //同等长度
if(less_than(v[j] + ss[i], v[i])){
v[i] = v[j] + ss[i]; //更新v[i]
}
if(dp[i] == ansl){
anss = v[i];
}
}
}
}
}
cout |