码迷,mamicode.com
首页 > 其他好文 > 详细

批判记者(额..我起的名字....)

时间:2017-06-14 21:16:53      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:inner   相同   log   自己   ace   问题:   三台   10个   表示   

时间: 1000ms / 空间: 655360KiB / Java类名: Main

背景

冬令营入学测试题

描述

题目描述

         小D是一名魔法师,它最喜欢干的事就是对批判记者了。

         这次记者招待会上,记者对于小D的数学很好奇。于是小D找了个方法把记者批判了一番。

         它对记者抛出了这么一个问题:我有n点能量,写下数字i(1<=i<=9)需要花费a{i}点能量,我用这n点能量最多能写出什么数来?(当然可以不用光n点能量,具体看样例)

         记者们一脸懵逼,于是来求助于你。

输入格式

一行10个数,表示n,a1,a2,a3,…,a9。

输出格式

一个数表示答案。

备注

输入样例1

10 2 2 1 2 2 2 2 2 2

输出样例1

3333333333

输入样例2

10 4 11 11 11 11 11 11 11 10

输出样例2

11    

数据范围

对于30%的数据n,ai<=10。

对于60%的数据n,ai<=100。

对于100% 的数据1<=n,ai<=1000000,n>=min{ai}。

【题目大意】

1-9这9个数,每写一个数都会耗费一定的能量,你有n点能量。

能写多大的数。

【思路】

贪心

一个数位数越大这个数越大,位数相同时高位数越大这个数越大。

我们先用耗能量小的数添位数,让我们写的这个数位数尽量的长。

然后用剩余的能量在位数不变的情况下,位数能换成更大的数就换。

【吐槽】

(#‵′)靠我换了三台机子编译器都炸 我还以为是自己代码错了一直在调ORZ.

rp是个好东西 希望我也有QAQ

【code】

一开始我只是按照耗能由小到大排序,尽量写得位数多,没有想到在位数不变的情况下换更大的数。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct N
{
    int val,sz;
}s[11];
int n,l=1,cnt,ans[10000];
bool cmp(N a,N b)
{
    if(a.val==b.val)return a.sz>b.sz;
    return a.val<b.val;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=9;i++)
    {
        scanf("%d",&s[i].val);
        s[i].sz=i;
    }
    sort(s+1,s+10,cmp);
    s[10].val=1e9;
    while(n)
    {
        while(n>=s[l].val)
        {
            n-=s[l].val;
            ans[++cnt]=s[l].sz;
        }
        if(l>9)break;
        l++;
    }
    for(int i=1;i<=cnt;i++)
    cout<<ans[i];
    return 0;
}

dalao代码 条理清晰 层次分明

#include<iostream>
#include<cstdio>
using namespace std;
int n,a[20],minn=1e9,s,ans[10];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=9;i++)
    scanf("%d",&a[i]);
    for(int i=1;i<=9;i++)
    {
        if(a[i]<minn||(a[i]==minn&&i>s))
        {
            minn=a[i];
            s=i;
        }
    }
    ans[s]=n/minn;
    n%=minn;
    for(int i=9;i>s;i--)
    {
        while(minn+n>=a[i])
        {
            ans[s]--;
            ans[i]++;
            n=n+minn-a[i];
        }
    }
    for(int i=9;i>=1;i--)
    for(int j=1;j<=ans[i];j++)
    printf("%d",i);
    return 0;
}

 

 

批判记者(额..我起的名字....)

标签:inner   相同   log   自己   ace   问题:   三台   10个   表示   

原文地址:http://www.cnblogs.com/zzyh/p/7010810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!