考試總結 2018-5-1
阿新 • • 發佈:2018-05-12
食物 試題 ani 解釋 iomanip ring 自己 stdin 第三題
把考試題都放在文件裏了,不知道你們能不能看到,反正就不貼題目了。
如題,是2018年河南省青少年信息學初中組競賽試題,很慚愧。那還有什麽說的,肯定是水題啊。
第一題以為是一個數論,看數據範圍的時候找不到了,找老師問了問,-1000到1000,那沒事看,直接暴力也是不會超時的。那就有了一個很直白的代碼。
#include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> usingt1namespace 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; }t2
第三題也是不難的,很裸的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; } } }t3
最後成績是300分哦。如果我早生幾年就好了,今年參加初中組的比賽拿個第一,多開心。
考試總結 2018-5-1