NOIP2010 普及组 蒟蒻的题解报告
2017-12-15 21:46
288 查看
看到标题有人就要问了:你刚写完2017怎么跑去写2010了?
当然是因为 2011-2016的题目我都没做完呗
事实上每年都是A了3题,卡在第四题,而2010年的题目难度都不太高……
(我太弱了额啊)
下方正文——
自古T1大水题,自古T4是DP。
(然而T4博弈论)
但是!这并不能阻挡 T1 简单的事实
T1 的算法非常简单,枚举直接上即可,也没什么需要注意的点
枚举 L 到 R 之间的每个数,将每个数的每一位拆开来再判断即可
那么怎么拆开呢?这对初学者来说可能是个难题(比如说当初的我)
让我们思考一下:
一个数,如果个位为0,余下来的数必然可以被10整除,而个位就是余数
也就是说,我们将一个数 对 10 取余(即 模10)就可以取到个位
而 整除 10 就可以去掉个位了
于是就很容易实现了
代码如下:
这题我选用的是 贪心大法
(事实上这题也可以枚举每秒,那样比较烦,也比较慢)
做法:每输入一个时间,就把它加到 目前被占用时间最小 的水龙头那里
那么这里就很简单了,每次排序即可
有人会担心时间复杂度,事实上只有 Θ(mnlogn)(快排)
当然这里要借用一下 STL 的 sort 函数
用法就不多说了
代码如下:
(事实上有两道导弹拦截,而两道完全不同)
这题也挺水的,用 枚举大法 即可
做法:读入一对坐标,算出它距离A设备的距离,再从大到小排一遍序
接着我们从头开始向后枚举分界点,分界点右边导弹的归A设备,左边的归B设备
我们知道如果系统去拦截导弹,那么可以顺带把距离更短的导弹也解决了
所以我们不用担心拦截不了什么的
而我们在这些枚举中取最小值就可以得到答案
代码如下:
是的……作为一个蒟蒻……博弈论是我心中永远的痛……
实在太难理解了啊喂!(╯‵□′)╯︵┻━┻
不过我还是做出来了……
这道题目的决策(我都不知道是不是这么说)是这样的:
由于AI每次取走的是与我们手上组成的组合默契值最高的,那么我们每次取第二高的,好的就被我们选走了,AI很被动,而他的最好的已经被我们取走了,所以AI就只能取第二强的了,这样就相当于 “他强任他强,我选托比昂”
举个栗子:
我们先取2,AI取走1,我们趁机取4,AI就只能取3
这样我们的默契值就是52,AI就只有13
代码如下:
原创 By Venus
写的不好大佬轻喷
当然是因为 2011-2016的题目我都没做完呗
事实上每年都是A了3题,卡在第四题,而2010年的题目难度都不太高……
(我太弱了额啊)
下方正文——
T1 数字统计
原题链接自古T1大水题,自古T4是DP。
(然而T4博弈论)
但是!这并不能阻挡 T1 简单的事实
T1 的算法非常简单,枚举直接上即可,也没什么需要注意的点
枚举 L 到 R 之间的每个数,将每个数的每一位拆开来再判断即可
那么怎么拆开呢?这对初学者来说可能是个难题(比如说当初的我)
让我们思考一下:
一个数,如果个位为0,余下来的数必然可以被10整除,而个位就是余数
也就是说,我们将一个数 对 10 取余(即 模10)就可以取到个位
而 整除 10 就可以去掉个位了
于是就很容易实现了
代码如下:
#include<iostream> using namespace std; int main() { int ans,i,l,r,j; ans=0; cin >> l >> r;//读入 for(i=l;i<=r;i++)//开始枚举 { j=i;//不好直接对i下手 while(j>0) { if(j%10==2) ans++;//如果个位是2,ans+1 j=j/10;//去掉个位 } } cout << ans << endl;//输出 return 0; }
T2 接水问题
原题链接这题我选用的是 贪心大法
(事实上这题也可以枚举每秒,那样比较烦,也比较慢)
做法:每输入一个时间,就把它加到 目前被占用时间最小 的水龙头那里
那么这里就很简单了,每次排序即可
有人会担心时间复杂度,事实上只有 Θ(mnlogn)(快排)
当然这里要借用一下 STL 的 sort 函数
用法就不多说了
代码如下:
#include<cstdio> #include<algorithm> using namespace std; int n,p,m,top[10005]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&p);//每次读入一个时间 top[1]+=p;//加到占用时间最小的水龙头上 sort(top+1,top+m+1);//排序 } printf("%d",top[m]);//由于最后排序了一次,所以数组尾一定是最大的数 return 0; }
T3 导弹拦截
原题链接(事实上有两道导弹拦截,而两道完全不同)
这题也挺水的,用 枚举大法 即可
做法:读入一对坐标,算出它距离A设备的距离,再从大到小排一遍序
接着我们从头开始向后枚举分界点,分界点右边导弹的归A设备,左边的归B设备
我们知道如果系统去拦截导弹,那么可以顺带把距离更短的导弹也解决了
所以我们不用担心拦截不了什么的
而我们在这些枚举中取最小值就可以得到答案
代码如下:
#include<iostream> #include<algorithm> using namespace std; int n,ans1,ans2,ax,ay,bx,by,ans; struct node { int x,y,n;//xy为坐标,n代表距离 }a[100005]; int RT(int a,int b,int aa,int bb) { return (a-aa)*(a-aa)+(b-bb)*(b-bb); //计算距离,由于输出的是平方和所以不用开根号 } bool cmp(node x,node y) { return x.n > y.n;//按距离从大到小排 } int Max(int x,int y) { return x > y ? x : y; } int Min(int x,int y) { return x < y ? x : y;//手打速度较快 } int main() { cin >> ax >> ay >> bx >> by >> n; for(int i=1;i<=n;i++) { cin >> a[i].x >> a[i].y; a[i].n=RT(a[i].x,a[i].y,ax,ay);//计算距离 } sort(a+1,a+n+1,cmp);//排序 ans1=a[1].n; ans=a[1].n;//初值记得设置,可能有特例 ans2=-2147400000; for(int i=2;i<=n+1;i++) { ans1=a[i].n;//上方已经说明过的过程,右边归A系统 int cnt=RT(a[i-1].x,a[i-1].y,bx,by); ans2=Max(ans2,cnt);//左边归B系统 ans=Min(ans,ans1+ans2);//存值 } cout << ans << endl;//输出 return 0; }
T4 三国游戏
原题链接博弈论伤不起啊! ——Venus
是的……作为一个蒟蒻……博弈论是我心中永远的痛……
实在太难理解了啊喂!(╯‵□′)╯︵┻━┻
不过我还是做出来了……
这道题目的决策(我都不知道是不是这么说)是这样的:
由于AI每次取走的是与我们手上组成的组合默契值最高的,那么我们每次取第二高的,好的就被我们选走了,AI很被动,而他的最好的已经被我们取走了,所以AI就只能取第二强的了,这样就相当于 “他强任他强,我选托比昂”
举个栗子:
编号 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
1 | 无 | 55 | 13 | 46 |
2 | 55 | 无 | 44 | 52 |
3 | 13 | 44 | 无 | 32 |
4 | 46 | 52 | 32 | 无 |
这样我们的默契值就是52,AI就只有13
代码如下:
#include<iostream> #include<algorithm> using namespace std; int n,a[505][505],ans; bool cmp(int x,int y) { return x > y; } int main() { cin >> n; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { cin >> a[i][j];//读入 a[j][i]=a[i][j];//构建图表 } } for(int i=1;i<=n;i++) { sort(a[i]+1,a[i]+n+1,cmp);//排序,从大到小排 ans=max(ans,a[i][2]);//每次取第二大的即可 } cout << "1" << endl << ans << endl;//由于我们必胜,所以输出1就可以了 return 0; }
小结
2010年的题目算是较为简单的,就是第四题对于思考的难度比较大,还是需要动脑子的!原创 By Venus
写的不好大佬轻喷
相关文章推荐
- NOIP 2010 普及组解题报告
- NOIP2010普及组 导弹拦截(重庆一中高2018级信息学竞赛测验3) 解题报告
- NOIP2008 普及组T2 排座椅 解题报告-S.B.S
- 【蒻爆了的NOIP系列--普及组复赛】(3)NOIP2012普及组复赛题解
- 全国信息学奥林匹克联赛(NOIP2010)复赛 3.导弹拦截 解题报告
- NOIP2010普及组T3 接水问题 ——S.B.S.
- 2017.08.06【NOIP 普及组】模拟赛C组 题解
- 纪中训练 day10【NOIP普及组】模拟赛D组 解题报告
- NOIP2015第一题【金币】题解(普及山东tyd)
- NOIP2015 普及组(Junior) 解题报告
- NOIP 2010 解题报告(机器翻译,乌龟棋,关押罪犯,引水入城)
- 【蒻爆了的NOIP系列--普及组复赛】(2)NOIP2011普及组复赛题解
- 【用脚趾头解决NOIP】(3)NOIP2010普及组阅读程序写运行结果
- 纪中训练 day3 【NOIP普及组】模拟赛D组 解题报告
- 纪中训练 day4 【NOIP普及组】模拟赛D组 解题报告
- NOIP2012普及组 (四年后的)解题报告 -SilverN
- NOIP2010第二题 ---数字统计(摘自洛谷题解)
- NOIP 2010普及组 数字统计
- noip2009普及组道路游戏解题报告
- c++回文日期【NOIP2016普及组】解题报告