F1. Nearest Beautiful Number (easy version)

很像网络赛北大出的那题 感觉这题是简化版
我们只需要把所有数都搞出来 然后二分即可
我们先枚举k1的情况
这个很简单 先枚举长度 然后枚举数
k
2的情况呢
我们也是先枚举长度 然后再枚举两个数为什么
然后最后1<<len的枚举每一位填第一个数还是第二个数
为了万无一失 我们还是unique一下
最后二分即可
最后我们发现这两个数加起来不超过1e5

vector<int>v[3];
void init(){
    v[1].push_back(0);
    for(int i=1;i<=10;i++){
        for(int j=1;j<=9;j++){
            string s;
            int k=i;
            while(k--){
                s+=char('0'+j);
            }
            v[1].push_back(stoll(s));
        }
    }
    for(int len=2;len<=10;len++){
        for(int j=0;j<=9;j++){
            for(int k=0;k<=9;k++){
                if(k==j)continue;
                for(int m=1;m<(1<<len)-1;m++){
                    string s;
                    for(int r=len-1;r>=0;r--){
                        if(m>>r&1){
                            s+=(char)('0'+k);
                        }else s+=(char)('0'+j);
                    }
                    v[2].push_back(stoll(s));
                }
            }
        }
    }
    sort(all(v[1]));
    sort(all(v[2]));
    v[2].erase(unique(all(v[2])),v[2].end());
}
void solve(){
    int n,m;cin>>n>>m;
    if(m==1)cout<<*lower_bound(all(v[m]),n)<<endl;
    else cout<<min(*lower_bound(all(v[m]),n),*lower_bound(all(v[1]),n))<<endl;
}

原文地址:http://www.cnblogs.com/ycllz/p/16928472.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性