题目传送门
题目意思:
现在你有 0
~9
的数字各
a
i
a_i
ai 个,请问最早不能组成的数字是哪个?
思路:
暴力是绝对不行的,因为在每个 a i a_i ai 都很大的时候就会超时!因此我们要找规律。
在样例中我发现了,第 i i i 个数最早不能组成的数一定用了 a i + 1 a_i+1 ai+1 个第 i i i 个数。如果是这样,我们就在 a i a_i ai 的值里找最小值就行了。找到最小值,输出 a i + 1 a_i+1 ai+1 个 i i i 就行了。
但是最小值是
a
0
a_0
a0 怎么办呢?只要特判如果 0
的个数比其他数的最小值还小,就输出一个 1
和
a
0
+
1
a_0+1
a0+1 个 0
即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int t;
int a[15];
int main()
{
cin>>t;
while(t--)
{
int minn=0x3f3f3f3f,id;
cin>>a[0];
for(int i=1;i<=9;i++)
{
cin>>a[i];
if(a[i]<minn)
minn=a[i],id=i;
}
if(a[0]<minn)
{
cout<<1;
for(int i=1;i<=a[0]+1;i++)
cout<<0;
cout<<endl;
}
else
{
for(int i=1;i<=minn+1;i++)
cout<<id;
cout<<endl;
}
}
}
完美撒花~