考试总结 2018-5-1
Posted qywyt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了考试总结 2018-5-1相关的知识,希望对你有一定的参考价值。
把考试题都放在文件里了,不知道你们能不能看到,反正就不贴题目了。
如题,是2018年河南省青少年信息学初中组竞赛试题,很惭愧。那还有什么说的,肯定是水题啊。
第一题以为是一个数论,看数据范围的时候找不到了,找老师问了问,-1000到1000,那没事看,直接暴力也是不会超时的。那就有了一个很直白的代码。
#include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> using namespace std; int i,f ,tx1,tx2,ty1,ty2,ans; bool o[2100][2100]; int main() { freopen("t1.in","r",stdin); freopen("t1.out","w",stdout); cin>>tx1>>ty1>>tx2>>ty2; for(i=tx1+1000;i<=tx2+1000-1;i++) for(f=ty1+1000;f<=ty2+1000-1;f++) o[i][f]=1; cin>>tx1>>ty1>>tx2>>ty2; for(i=tx1+1000;i<=tx2+1000-1;i++) for(f=ty1+1000;f<=ty2+1000-1;f++) o[i][f]=1; cin>>tx1>>ty1>>tx2>>ty2; for(i=tx1+1000;i<=tx2+1000-1;i++) for(f=ty1+1000;f<=ty2+1000-1;f++) o[i][f]=0; for(i=0;i<=2000;i++) for(f=0;f<=2000;f++) if(o[i][f])ans++; cout<<ans; }
由于可能存在的负数,可以直接加上1000后再用。那bool数组开2000*2000就够用了。检查检查,没有问题。
第二题是坑了好多同学的,他们由于没有好好读题,加上数据和我的诱导使他们相信“大白的朋友”是直接回到自己的位子上的,sort后直接输出了,错的那叫一个惨哦,只有10分。
其实是一道纯模拟啦,数据刚好转三次后又回到了自己本来的位子而已。代码如下。
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<cstdio> #include<cmath> #include<ctime> #include<iomanip> using namespace std; int i,f,n,o[120]; int t[120],num[120]; int main() { freopen("t2.in","r",stdin); freopen("t2.out","w",stdout); cin>>n; for(i=1;i<=n;i++) { cin>>o[i]; t[i]=i; } for(i=1;i<=n;i++) cin>>num[i]; //////////////////// for(i=1;i<=n;i++) t[i]=o[t[i]]; for(i=1;i<=n;i++) t[i]=o[t[i]]; for(i=1;i<=n;i++) t[i]=o[t[i]]; /////////////////// for(i=1;i<=n;i++) cout<<num[t[i]]<<endl; return 0; }
第三题也是不难的,很裸的01背包。我的方法是对于所有的食物跑一遍循环,把不能这个食物就能到达的位子加上这个食物后的标记一下……算了解释不清。自己看代码。
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<cstdio> #include<cmath> #include<ctime> #include<iomanip> using namespace std; int i,f,maxx,n, t; bool flag[45010]={1}; int main() { freopen("t3.in","r",stdin); freopen("t3.out","w",stdout); cin>>maxx>>n; for(i=1;i<=n;i++) { cin>>t; for(f=0;f<=maxx-t;f++) { if(flag[f])flag[f+t]=1; } if(flag[maxx]) { cout<<maxx; return 0; } } for(i=maxx-1;;i--) { if(flag[i]) { cout<<i; return 0; } } }
最后成绩是300分哦。如果我早生几年就好了,今年参加初中组的比赛拿个第一,多开心。
以上是关于考试总结 2018-5-1的主要内容,如果未能解决你的问题,请参考以下文章