链接:https://ac.nowcoder.com/acm/problem/13253 来源:牛客网

题目描述 给出一个正整数n,我们把1..n在k进制下的表示连起来记为s(n,k),例如s(16,16)=123456789ABCDEF10, s(5,2)=11011100101。现在对于给定的n和字符串t,我们想知道是否存在一个k(2 ≤ k ≤ 16),使得t是s(n,k)的子串。

输入描述: 第一行一个整数n(1 ≤ n ≤ 50,000)。 第二行一个字符串t(长度 ≤ 1,000,000)。

输出描述: "yes"表示存在满足条件的k,否则输出"no"

示例 输入: 8 01112 输出: yes

#include<cstring>
#include<algorithm>

using namespace std;

int n;
string t,s;

int main()
{
    cin >> n >> t;
    int z = 0;
    string m = "0123456789ABCDEF";
    for(int i = 2 ; i <= 16 ; i ++)
    {
        s = "";
        for(int j = n ; j >= 1 ; j --)
        {
            int d = j;
            while(d != 0){s.push_back(m[d%i]);d /= i;}
        }
        reverse(s.begin(),s.end());
        if(s.find(t) != -1) {cout << "yes" << endl;z = 1;break;}
    }
    if(z == 0) cout << "no" << endl;
    return 0;
}