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;
}