细节有一点多的贪心。

如果 说明填不满位数,改变位数:

位数从前到后先填 后填 ,同时统计哪一位被填了

分析可得:

  • 若这一位有 的存在,最多可以填到
  • 否则只能填到

模拟贪心即可。

#include<bits/stdc++.h>
using namespace std;

inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}

inline void print(int x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)print(x/10);
    putchar(x%10^48);
}

const int MAXN=5e6+5;
int t,a,b,c,ans[MAXN];
bool f[MAXN];

int main(){
    t=read();
    while(t--){
        a=read(),b=read(),c=read();
        if(a+b<c)c=a+b;
        for(int i=1;i<=c;++i){
            if(a)ans[i]=5,a--;
            else ans[i]=1,b--,f[i]=1;
        }
        for(int i=1;i<=c;++i){
            if(f[i]){
                if(b<=(3-ans[i]))ans[i]+=b,b=0;
                else b-=3-ans[i],ans[i]=3;
                f[i]=0;
            }else{
                if(b<=(8-ans[i]))ans[i]+=b,b=0;
                else b-=8-ans[i],ans[i]=8;
            }
        }
        for(int i=1;i<=c;++i)print(ans[i]),ans[i]=0;puts("");
    }
    return 0;
}