先存个样~~之后补全
个人解法,可能不是最佳,欢迎指错
小总结,第一次参加总得来一个国二,
(但我还是很菜)
下面是自己习惯性用的头文件
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<set>
#include<vector>
#include<cmath>
#define pii pair<int,int>
#define mem(kk,i) memset(kk,i,sizeof kk)
using namespace std;
typedef long long ll;
const int maxn=1e7;
const int INF=0x3f3f3f3f;
/*next_permutation();
prev_permutation():
*/
A:美丽的 2
【问题描述】
小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴。
他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中包含数字 2?
思路:直接1-2020枚举判断
int main(){
int tot=0;
for(int i=1;i<=2020;i++){
int k=i;
while(k){
int g=k%10;
k/=10;
if(g==2){tot++;break;}
}
}
cout<<tot<<endl;
return 0;
}
答案:563
B:扩散
【题目描述】
小蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。
小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (11, 14), (2000, 2000)。
只有这几个格子上有黑色,其它位置都是白色的。
每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。
请问,经过 2020 分钟后,画布上有多少个格子是黑色的。
思路:bfs跑,,然后时间在2020内都记录,边记录边累计个数,每个加个2100,从0开始,一分钟向上扩散1,最多不超过2100
struct node{
int x;
int y;
int t;
};
int da[4][2]={1,0,-1,0,0,-1,0,1};
int n=2100;
int ma[10000][10000],vis[10000][10000];
queue<node> q;
void bfs(){
mem(ma,0);
mem(vis,0);
node s,p;
p.t=0,p.x=n,p.y=n;q.push(p);
p.t=0,p.x=n+2000,p.y=n+2000;q.push(p);
p.t=0,p.x=n+2020,p.y=n+11;q.push(p);
p.t=0,p.x=n+11,p.y=n+14;q.push(p);
vis[n][n]=vis[n+2000][n+2000]=vis[n+2020][n+11]=vis[n+11][n+14]=1;
ll ans=4;
while(!q.empty()){
p=q.front();
q.pop();
for(int i=0;i<4;i++){
s.x=p.x+da[i][0];
s.y=p.y+da[i][1];
s.t=p.t+1;
if(vis[s.x][s.y]==0&&s.t<=2020){
vis[s.x][s.y]=1;
ans++;
q.push(s);
}
}
}
cout<<ans<<endl;
}
int main(){
bfs();
return 0;
}
答案:20312088
C阶层约数
【问题描述】
定义阶乘 n! = 1 × 2 × 3 × · · · × n。
请问 100! (100 的阶乘)有多少个约数。
思路:将它的每个因数分解,比如 5! = 1x2x3x4x5 = 2
3
x3
1
x5
1
,
2就可以挑选0个、1个、2个、3个,同样3和5,那他的约数个数就是每个约数指数的乘积,相当于多少种方法
这个是看了这个
博主
(当时差一点就想到了,没做出来,哎,可惜吖!)
代码:
int a[101];
int main(){
mem(a,0);
for(int i=2;i<=100;i++){
int tem=i;
for(int j=2;j<=i;j++){
while(tem%j==0){
tem/=j;
a[j]++;
}
}
}
ll ans=1;
for(int i=1;i<=100;i++)
ans*=(a[i]+1);
cout<<ans<<endl;
return 0;
}
答案:39001250856960000