A 美丽的2
【问题描述】
小蓝特别喜欢2,今年是公元2020年,他特别高兴。
他很好奇,在公元1年到公元2020年(包含)中,有多少个年份的数位中包含数字2?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n = 2020;
int sum = 0;
for (int i = 0; i <=n; i++){
int temp = i;
while(temp>0){
if(temp%10==2){
sum++;
break;
}
temp = temp / 10;
}
}
cout << sum << endl;
return 0;
}
答案:563
B:扩散
【问题描述】
小蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。小蓝在画布上首先点了一下几个点:(0,0),(2020,11),(11,14),(2000,2000)。只有这几个格子上有黑色,其它位置都是白色的。
每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。
请问,经过2020分钟后,画布上有多少个格子是黑色的。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
题解:直接把所有的可能到达的到初始的点的距离进行运算,就可以得到最终的结果的
#include<bits/stdc++.h>
using namespace std;
//(0,0),(2020,11),(11,14),(2000,2000)
int main(){
long long sum = 0;
for (int i = -5000; i <= 5000;i++){
for (int j = -5000; j <= 5000;j++){
if(((abs(i-0)+abs(j-0))<=2020)||((abs(i-2020)+abs(j-11))<=2020)||((abs(i-11)+abs(j-14))<=2020)||((abs(i-2000)+abs(j-2000))<=2020)){
sum++;
}
}
}
cout << sum << endl;
return 0;
}
答案:20312088
C阶层约数
【问题描述】
定义阶乘n!=1×2×3×··×n。
请问100! (100的阶乘)有多少个约数。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
https://blog.csdn.net/weixin_46239370/article/details/109707904
可以去看这个博客的
D:本质上升序列
【问题描述】
小蓝特别喜欢单调递增的事物。
在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。
例如,在字符串 lanqiao 中,如果取出字符n和 q,则nq组成一个单调递增子序列。类似的单调递增子序列还有lnq、 i、 ano 等等。
小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第二个字符和最后一个字符可以取到 ao,取最后两个字符也可以取到ao。小蓝认为他们并没有本质不同。
对于一个字符串,小蓝想知道,本质不同的递增子序列有多少个?
例如,对于字符串 lanqiao,本质不同的递增子序列有21个。它们分别是l、a、n、q、 i、o、ln、an、lq、aq、nq、ai、lo、ao、no、io、lnq、anq、 lno、 ano、 aio。
请问对于以下字符串(共200个小写英文字母,分四行显示):(如果你把以下文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 inc.txt,内容与下面的文本相同>
tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkghfwl
本质不同的递增子序列有多少个?
不会写
E:玩具蛇
题解:就是当你进行DFS进行访问的时候,要进行提前进行判断退出递归的,不然可能会导致时间超时的。
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> vis(4, vector<int>(4, 0));
long long sum = 0;
void dfs(int i, int j,int len){
if(vis[i][j]==1){
return;
}
if (len == 16)
{
sum++;
return;
}
vis[i][j] = 1;
if(i-1>=0){
dfs(i-1, j, len + 1);
}
if(j-1>=0){
dfs(i, j-1, len + 1);
}
if(i+1<4){
dfs(i+1, j, len + 1);
}
if(j+1<4){
dfs(i, j+1, len + 1);
}
vis[i][j] = 0;
}
int main(){
for (int i = 0; i < 4;i++){
for (int j = 0; j < 4;j++){
dfs(i, j,1);
}
}
cout << sum << endl;
return 0;
}
答案:552
F: 皮亚诺曲线距离
考试写的忘记了,大概意思就是找出两个点之间的3*3的小块,那么中间路径就可以不用考虑,就只用考虑两个自己分别在的小块应该被当做多少路径来进行计算的,3*3的小块只有四种状态,两种形状和进出方向不同,可以通过输入的X和Y得到位置和对应的形状就可以了,这道题测试用例应该比较弱的,没有考虑太多的情况,
G: 游园安排
H: 答疑
贪心,排序,每次选最小的那个
I: 出租车
J: 质数行者
应该是一个DP问题的,假如没有两个陷阱点,那么x,y,z每条路径分别有xn,yn,zn种走法
(背包问题,物品数没有限制的背包问题,详情见背包9讲),那么总的走法xn*yn*zn;
之后怎么把两个陷阱点对应的路径进去,就是要把从陷阱点到终点的那些路径都去掉,那么也是一个背包,但是两个陷阱点使用DP可能会有重复
总结:由于某些原因导致写第一题有点慌张,导致没有看含有2的年份,我把所有的二都考虑进去。那么最后应该是两道填空题和三个 半个代码题。
成绩出来是一个国二