1276: 峰峰不搞G
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld[ Submit][ Status][ Web Board]
Description
峰峰在2013年暑假集训的时候找到了自己的真爱,她的名字叫LRW。今天距离2013年武科大“菜鸟杯”程序设计竞赛已经过去了十年了,今天对峰峰和LRW也是特别的一天——1周年结婚纪念日。这一天LRW问了峰峰一个问题:你会爱我多久?峰峰想让这个回答更有一些意义,又正巧家里有一面闲置的白墙。于是峰峰出门去买了一桶油漆。他想用油漆在墙上写下一个代表天数的数字作为他的答案。为了表达他对LRW的爱,他想把这个数字写的尽量大一些。但是讨厌英语的他不喜欢数字0,因为他觉得这像大写的英语字母‘O’。
问题来了,假设他买来的油漆有n公升(1<=n<=10^6)。然后他在事前实验了一下他在墙上写下1-9中每个数字所需要花费的油漆数量,分别为a1,a2,a3...a9(1≤ai≤10^5)(单位:公升)。那么你知道他写下了哪一个数字吗?
如果那天他一个数字都写不出来,那么LRW就会帮他写下”Lihun!”(不要引号)。
Input
第一行输入n,表示他买来的油漆的数量。
第二行输入9个数字,表示对应写在墙上的数字所需要花费的油漆数量。
Output
峰峰或者LRW在墙上写下的东西。即如果峰峰能写下某个数,请输出那个数字。否则输出”Lihun!”...
Sample Input
5
5 4 3 2 1 2 3 4 5
2
9 11 1 12 5 8 9 10 6
0
1 1 1 1 1 1 1 1 1
Sample Output
55555
33
Lihun!
HINT
比如第一个样例:峰峰在墙上写一个数字1,需要花费5公升的油漆。写一个数字2需要花费4公升油漆……那么此时拥有5公升油漆的他,可以在墙上写下5个5,而且也是最大的。所以输出55555...
思路:先用所有的油漆来买那个花费油漆最少,同时值最大的数字,假设数字5是花费油漆中最少的最大的数,写一个5花费b升油漆,我们把油漆全用来写5,还剩下a升油漆。然后用剩下的油漆加上一个b升油漆(即拿出一个5换成b升油漆)看这a+b升油漆能不能写一个比5大的最大的数,如果能那就把这个5换成那个较大的数,如此循环,直到换不了更大的数。
#include<stdio.h>
int main()
{
int n,a[10];
while(scanf("%d",&n)!=EOF)
{
int ans,QWQ=1;
for(int i=1;i<=9;i++)
{
scanf("%d",&a[i]);
QWQ=a[QWQ]>=a[i]?i:QWQ;
}
ans=n/a[QWQ];
if(ans)
{
n=n-ans*a[QWQ];
while(1)
{
int flag=0;
for(int i=9;i>QWQ;i--)
{
if(n+a[QWQ]>=a[i])
{
flag=1;
n=n-a[i]+a[QWQ];ans--;
printf("%d",i);break;
}
}
if(flag==0)break;
}
while(ans--)printf("%d",QWQ);
printf("\n");
}
else puts("Lihun!");
}
return 0;
}