天天看點

NOIP2012 提高組 複賽 day1 game

NOIP2012 提高組 複賽 day1 game

1、題目讀下來,直到純粹的窮舉法,肯定要越界。

2、沒有更好的辦法時,快速有效竟可能的得更多分是第一要素。

3、隻是簡單考慮将大臣按右手資料由小到大排隊,當然肯定考慮不周全,但是沒有更好的辦法。

4、考慮到資料量,盡可能保證代碼好寫的情況下,采用冒泡排序,沒有采用快速排序。

5、代碼很快就編寫成功,從讀題到編寫出代碼前後所花時間也就半小時。

6、預測10組測評資料,能通過6組,得60分。

7、實測10組測評資料,通過5組,得50分。

8、對以上結果還是十分滿意的。

編譯環境Dev-C++4.9.9.2

附上代碼:

//Teacher 陳 代碼 2016年8月25日

//NOIP2012 提高組 複賽 day1 game

//估計10組測評資料能有6組通過,60分,目前想不更好的辦法,權益之計

//經複賽10組測評資料,通過5組,50分。在沒有更好思路時,用目前思路,得分是第一位。

#include <stdio.h>

struct node{

    int a;

    int b;

};

const int maxn=1000+10;

struct node data[maxn],t;

int ans[maxn];

int main(){

    FILE *fin,*fout;

    int n;

    int i,j,tmp;

    fin=fopen("game.in","rb");

    fout=fopen("game.out","wb");

    fscanf(fin,"%d",&n);

    fscanf(fin,"%d%d",&data[0].a,&data[0].b);

    for(i=1;i<=n;i++)

        fscanf(fin,"%d%d",&data[i].a,&data[i].b);

    for(i=1;i<=n;i++)//按右手自小到大排序

        for(j=i+1;j<=n;j++){

            if(data[i].b>data[j].b){

                t=data[i];

                data[i]=data[j];

                data[j]=t;

            }

        }

    for(i=1;i<=n;i++){//計算每位大臣配置設定到的金币

        ans[i]=1;

        for(j=0;j<i;j++){

            ans[i]*=data[j].a;

        }

        ans[i]/=data[i].b;

    }

    for(i=1;i<=n;i++)//将答案自大到小排序

        for(j=i+1;j<=n;j++){

            if(ans[i]<ans[j]){

                tmp=ans[i];

                ans[i]=ans[j];

                ans[j]=tmp;

            }

        }

    fprintf(fout,"%d\n",ans[1]);

    fclose(fin);

    fclose(fout);

    return 0;

}