- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NOIP2021 普与组复赛解题报告
本人是潍坊一中的 wyw ,69 级,今年高一, 现在立刻就要 NOIP 了, 准备把历年的 NOIP
普与、提高组题目都做一下, 然后写写解题报告∵这个报告主要是给中学同学看的,所以我会写的具体一点
Prolem 1 珠心算测试 (count)
|精.
|品.
|可.
|编.
|辑.
|学.
|习.
|资.
|料.
*
|
*
|
*
|
*
|
|欢.
|迎.
|下.
|载.
这道题其实很简洁, 意思就是说给你一些数 a1,a2,a3,a4...an, 然后让你回答有多少个
A+B=C 〔A ≠ B ≠〕满C足 (回答 C 的数量,而不是等式的数量 )
方法一
那么有一种很明显的做法就是三层循环枚举 C、A 、B, 留意: C 是在最外层,假设找到了一个 A 和一个 B,满意上述等式,如此 C 是一个符合要求的解,这时 ans++ ,并且退出当前枚举,枚举下一个 C,这种 算法 的时间复杂度是 O(N3)
而我当时没想到这个算法,由于有更好用而且简洁更不简洁出错的解法,
方法二
两重循环,分别枚举 i=1...n,j=i+1...n ,假如 ai+aj 这个数在集合中存在,那么
you[ai+aj] ←true,然后再从 a1 到 an 做一次扫描,只要 you[ai], ans++
这个算法的好处在于它很好写, 不用退出什么的, 也不用留意循环的次序, 而且时间复杂度是 O(N 2)
代码 (方法 2) :
#includecstdio using namespace std; int n, a[101], i, j, count;
bool you[20001]={false};
int main()
{
freopen(count.in,r,stdin);
freopen(count.out,w,stdout); scanf(%d,n); for(i=1;i=n;i++)scanf(%d,a[i]);
|精.
|品.
|可.
|编.
|辑.
|学.
|习.
|资.
|料.
*
|
*
|
*
|
*
|
|欢.
|迎.
|下.
|载.
for(i=1;in;i++) for(j=i+1;j=n;j++)
you[ a[i]+a[j] ]=true; count=0; for(i=1;i=n;i++)
count += you[ a[i] ]; printf(%d\n,count); return 0;
}
在此征求一下大神的看法,如有更快的做法,敬请奉上
小结:
这道题很简洁, 但许多人没有做对的缘由就是没有好好懂得题意, 但是根本缘由其实仍在于心态太自豪了, 认为是第一题就可以轻视,这样是不好的,水题我们更要做好啊, 你想想同
样是 100 分,这 100 分多么好拿,所以是水题、越该放平心态,细心地做;当时我正是由
于重视〔 2021 年第一题爆零的教训〕,用了整整 15 分钟才做好,最终得了 100 分
Problem 2 比例简化
这道题目是说,给定 A 和 B,求解一组 A’ 和 B’ ,满意以下条件:
A ′B ′- AB ≥00A ′,B′≤L A ′和 B′互质
第一,想一个总体的框架: 我们发觉 L ≤100,因此可以枚举 A ′和 B′,然后判定是否 A’B’
满意上述条件,并且打擂台求比值最小的一组就行了,打擂台的复杂度是 O(1);设验证的复杂度为 O(k),如此总的算法的复杂度为 O(kL 2) ,其中 L 2 是 104,所以我们只要保证 k
的大小在 100 以内就肯定没有问题; 现在要求两个分数的差值,该怎么办呢?高精除!很
|精.
|品.
|可.
|编.
|辑.
|学.
|习.
|资.
|料.
*
|
*
|
*
|
*
|
|欢.
|迎.
|下.
|载.
多人一下就想到了,当时我在赛场上就是这么想的,但是又认真一考虑;;;;;第一,高
精除有风险,而且假如我是出题者的话, 我肯定会卡高精除, 其次,高精除的编程复杂度很高,很简洁出错而且耗时间 于是我重新读题,找寻一些特殊的切入点,最终看到了这个东
西: 1≤A,B ≤106,我的脑袋里瞬时就萌生出一种想法:模拟手动比拟分数 —— 就是说假如你要比拟两个分数,就先把他们通分,然后比拟分子的大小,如 ab 和 cd 比拟,先把它们化
成 adbd 和 bcbd 的形式,然后比拟 ad 和 bc 的大小,而在整个枚举的过程中,你最大的情形
只需要比拟 A ′B ′和 AB 的大小 ,而且他们分母的乘积最大是 108,到此,问题就完善地解决了!
贴上代码:
#includecstdio #includeiostream using namespace std;
long A,B,a
您可能关注的文档
最近下载
- 五年级《道德与法治》上册期中考试卷及答案.docx VIP
- 山东省德州市2024-2025学年高二上学期期中考试生物试题..docx VIP
- 离散输入inspectionrun1电梯技术8 dcss vfj.pdf VIP
- 李可老中医急危重症疑难病经验专辑(精品版本).docx VIP
- 2025年中国快运快递产业园区行业市场全景评估及发展战略研究报告.docx
- 无损检测质量管理体系.ppt VIP
- 中职汽车维修实践教学在工匠精神培养中的研究课题报告教学研究课题报告.docx
- 铃木船外机四冲程DF150TG-DF150ZG-DF175TG-DF175ZG中文维修手册.pdf
- 吉林2025年长春市总工会公开招聘工会社会工作者107人笔试备考试题及答案解析.docx VIP
- 2025吉林长春市总工会公招聘工会社会工作者(107人)招聘笔试模拟试题及答案解析.docx VIP
原创力文档


文档评论(0)