NOIP2021
前言
本 juruo
坐标 CQ
准考证号为 CQ-0212
如有亿些错误,欢迎各位 dalao
指出本 juruo
的错误。
本文章由三个部分组成:
1.游记
2.反思
3.
一.NOIP2021游记
1.考试之前
前两个月~前一个星期:一直在学习新知,挑战亿些难题。
前一个星期~考试前一天晚上:自己在 luogu
上面复习亿些算法,独立完成亿些算法的模板。
考前一天晚上:考试前最后一次打开电脑,复习那些在 NOI Linux
环境下可以使用的 STL
函数。
2.考试之时
前 O2
的情况写我的 luogu
上面只跑了 O2
的原因吧)。
CCF
给的第二组样例的时候跑了整整 dp
。但是我在打 dp
的时候始终没有搞清楚该向 dp
数组传那些参数,所以我的 dp
就始终没有过样例,最后很无奈的我只好交了我的 CCF
给的毒瘤数据范围之下,全部超时了。
dp
算法,但由于有一个方差的公式始终没有推出来,最后还是放弃了 dp
的算法,采用了爆搜。又 WA
又 TLE
拿到了 好成绩。
cpp
文件都删掉,然后吃了点东西,最后就考试结束了。
3.考试之后
考试之后也没有对自己抱有多少期待,拿着从老师那里得到的代码自测了一下,就等着老师讲题,放下 NOIP
不管了。
二.NOIP2021赛后反思
AC
了,但是由于考试的时候我跑了整整 TLE
,但后来我才发现其根本原因是因为读入数据和要输出的东西太多,而我用的是 scanf,printf
输入输出,没有用快读快写,才造成了这个我认为会 TLE
假象 。所以我希望下次考试的时候,对于这种输入量较大的题目,一定要记得打快读快写。(虽然说到现在为止,我还是不会打快读快写。)
DFS
,其实这个题目打 DFS
是可以得分的,但由于我的 check
函数(检查
DFS
的正确性,如果能够打出正确的深搜并且适当的加一些剪枝的话,肯定不会只得到
三.NOIP2021题解
由于我目前只做对了
该题思路
这个题目在报数游戏的基础上加了一条规则。通过我的话简化一下就是如果一个数
我们可以预处理出所有各位数字上有
该题代码
#include<bits/stdc++.h>
using namespace std;
int t;
int x[2000005];
bool st[10000005];
int last,primes[10000005],cnt;
int ans[10000005];
bool getnum(int x)
{
while(x)
{
if(x%10==7)
return 0;
x/=10;
}
return 1;
}
int maxn;
void init()
{
for(int i=1;i<=maxn;++i)
{
st[i]=1;//先全部初始化为1
}
for(int i=1;i<=maxn;++i)
{
//预处理出所有各位数字上有 7 的数
if(!getnum(i))
{
primes[++cnt]=i;
st[i]=0;
}
}
for(int i=1;i<=maxn;++i)
{
for(int j=1;j<=cnt&&primes[j]*i<=maxn;++j)
{
st[i*primes[j]]=0;//讲所有预处理出的数的倍数标记为0
}
}
//处理最终答案
for(int i=1;i<=maxn;++i)
{
if(st[i])
{
ans[last]=i;
last=i;
}
else
{
ans[i]=-1;
}
}
}
int main()
{
// freopen("number.in","r",stdin);
// freopen("number.out","w",stdout);
scanf("%d",&t);
maxn=1e7+1;//注意需要预处理到 1e7+1 因为 1e7+1 要报,且 1e7 之前报的最后一个数报的下一个数就是 1e7+1
init();//直接预处理出答案
for(int i=1;i<=t;++i)
{
//输入
scanf("%d",&x[i]);
printf("%d\n",ans[x[i]]);
}
return 0;
}
该题的一个小优化
我们可以发现,如果这样做的话,一个数可能会被标记很多次,而事实上,他只需要被标记一次就可以了。所以,我们可以针对这个进行优化,是的一个数在被标记时,只能被被预处理出的数中最小的,且是他的因子标记到。其思想就相当于欧拉筛,实现此优化,我们只需要在标记预处理的倍数的你那一层循改一下。
实现优化的核心代码
for(int i=1;i<=maxn;++i)
{
for(int j=1;j<=cnt&&primes[j]*i<=maxn;++j)
{
st[i*primes[j]]=0;//讲所有预处理出的数的倍数标记为0
if(i%primes[j]==0)//通过这一个优化,使得他只能被被预处理出的数中最小的筛到
{
break;
}
}
}
结尾
关于 NOIP2021
今天本 juruo
就讲到这里了,see you! QwQ
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】