首页 > 其他 > 详细

CF1560 F2. Nearest Beautiful Number (hard version)

时间:2021-09-08 18:59:21      阅读:52      评论:0      收藏:0      [点我收藏+]

https://codeforces.com/contest/1560/problem/F2

 

题意:

定义一个数字是k美丽的,当且仅当组成他的数字种类数<=k

给出数字n,求最小的>=n的k美丽数

 

贪心的思路

每次找出现第k+1种数字的位置

从这个位置开始往前找第一个不是9的位置,把它加1,后面的全改为0

持续进行这个操作,直到不存在第k+1种数字

 

 

#include<bits/stdc++.h>

using namespace std;

set<char>st;

int main()
{
    int T,n,k,len,pos;
    char s[11];
    bool tag;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s%d",s+1,&k);
        len=strlen(s+1);        
        while(1)
        {
            st.clear();
            for(int i=1;i<=len;++i) st.insert(s[i]);
            if(st.size()<=k) break;
            st.clear();
            for(int i=1;;++i)
            {
                st.insert(s[i]);
                if(st.size()>k)
                {
                    pos=i;
                    while(s[pos]==9) pos--;
                    s[pos]++;
                    for(int j=pos+1;j<=len;++j) s[j]=0;
                    break;
                }
            }
        }
        printf("%s\n",s+1);
    }
}

 

CF1560 F2. Nearest Beautiful Number (hard version)

原文:https://www.cnblogs.com/TheRoadToTheGold/p/15240096.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!