1. 程式人生 > >考試總結 2018-5-1

考試總結 2018-5-1

食物 試題 ani 解釋 iomanip ring 自己 stdin 第三題

  把考試題都放在文件裏了,不知道你們能不能看到,反正就不貼題目了。

  如題,是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; }
t1

  由於可能存在的負數,可以直接加上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