细节有一点多的贪心。
如果 说明填不满位数,改变位数:。
把 位数从前到后先填 后填 ,同时统计哪一位被填了 。
分析可得:
- 若这一位有 的存在,最多可以填到 。
- 否则只能填到 。
模拟贪心即可。
#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; }