Codeforces Round #202 (Div. 2) B.Color the Fence

2014-11-23 23:18:17 · 作者: · 浏览: 6
以为过了
5
2 2 2 2 2 2 2 2 3
就对了的。
结果。。。
19
9 9 9 9 9 9 5 6 8
输出 987
哈哈哈
跟上面那种是一样的原理。先刷小的。刷不够了换一个小的加剩余的 看能不能凑一个大的
但是凑了一个大的以后呢。可能还有余数。那就还要去凑。
#include   
#include   
#include   
#include   
#include   
#include   
#include   
#include   
#define lson num<<1,s,mid  
#define rson num<<1|1,mid+1,e  
  
using namespace std;  
  
int a[15];  
int top;  
int ss[1000000];  
int main()  
{  
    top=0;  
    int n;  
    scanf("%d",&n);  
  
    int Min=99999999;  
    int k;  
    for(int i=1;i<=9;i++)//找最小  
    {  
        scanf("%d",&a[i]);  
        if(Min>
=a[i]) { Min=a[i]; k=i; } } if(Min>n) { printf("-1\n"); return 0; } bool found=true; int tmp=n%Min; while(found) //凑啊凑 凑不了了就不凑 { int sb=-1; int i; for(i=k+1;i<=9;i++) { if(tmp+Min>=a[i]) { sb=i; } } if(sb==-1)found=false; else { tmp-=(a[sb]-Min); ss[top++]=sb; } } int ttmp=n/Min; if(top!=0) ttmp-=top; sort(ss,ss+top); //printf("top =%d\n",top); for(int i=top-1;i>=0;i--) printf("%d",ss[i]); for(int i=1;i<=ttmp;i++) { printf("%d",k); } puts(""); return 0; }