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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值