「杂题乱刷2」CF2067C

唐吗?唐的。

题目链接

CF2067C Devyatkino

解题思路

首先注意到答案一定不会大于 \(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;
}
posted @ 2025-02-13 16:35  wangmarui  阅读(25)  评论(0)    收藏  举报