当前位置:编程学习 > C/C++ >>

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

 
以为过了
5
2 2 2 2 2 2 2 2 3
就对了的。
 
结果。。。
19
9 9 9 9 9 9 5 6 8
输出 987
 
哈哈哈
 
跟上面那种是一样的原理。先刷小的。刷不够了换一个小的加剩余的  看能不能凑一个大的
但是凑了一个大的以后呢。可能还有余数。那就还要去凑。
 
 
#include <iostream>  
#include <cstdio>  
#include <algorithm>  
#include <cstring>  
#include <cmath>  
#include <vector>  
#include <string>  
#include <set>  
#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;  
}  

 

 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,