「杂题乱刷2」CF2067C
唐吗?唐的。
题目链接
解题思路
首先注意到答案一定不会大于 \(7\),这点显然,不多说。
那么直接暴力枚举即可,你需要保证每种数字选取次数之和不大于 \(7\),还是暴力即可,时间复杂度 \(O(T \times 7!)\),可以通过此题。
那么为什么只用取到 \(9999999\) 呢?因为根据 \(7\) 的整除性,此时 \(7\) 个 \(9\) 构成了一个 \(7\) 循环,此时一定最优,此时必定取到最优情况。
参考代码
唐的一批。
ll n;
ll f(ll x)
{
ll pd=0;
while(x)
pd|=x%10==7,
x/=10;
return pd;
}
void _clear(){}
void solve()
{
_clear();
cin>>n;
if(f(n))
{
cout<<0<<endl;
return ;
}
ll nn=n,ans=7;
forl(______,0,ans)
forl(_____,0,ans-______)
forl(____,0,ans-______-_____)
forl(___,0,ans-______-_____-____)
forl(__,0,ans-______-_____-____-___)
forl(_,0,ans-______-_____-____-___-__)
forl(qwq,0,ans-_-__-___-____-_____-______)
{
nn=n+99*_+999*__+9999*___+99999*____+999999*_____+9999999*______+99999999*qwq;
if(f(nn))
{
Min(ans,_+__+___+____+_____+______+qwq);
continue;
}
forl(i,1,ans-_-__-___-____-_____-______-qwq)
{
nn+=9;
if(f(nn))
{
Min(ans,i+_+__+___+____+_____+______+qwq);
break;
}
}
}
cout<<ans<<endl;
}

浙公网安备 33010602011771号