列表

详情


NC219915. NIT的数

描述

NIT 在 n 年前还是普及组选手的时候做过这样一个题目,判断一个数是否为回文数,以NIT现在国家队的实力,做这样的题实在是太侮辱他的智商了,于是他思考着加强这道题目。

给你一个正整数 x ,求第 k 小的正整数 y 满足 且 y 是一个回文数。

输入描述

一行 2 个正整数 x,k,意义见题目。

输出描述

一行 1 个正整数 y,意义见题目。

示例1

输入:

14 1

输出:

22

示例2

输入:

99 2

输出:

101

说明:

注意:99 本身也是 \geq 99的回文数

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 50ms, 内存消耗: 504K, 提交时间: 2021-10-02 16:34:02

using namespace std;
#include <bits/stdc++.h>
#define ll long long
ll pw[19];
ll x,k;
ll print(ll v,int flag){
	int w=log10(v);
	ll u=v;
	for (int i=flag;i<=w;++i) u=u*10+v/pw[i]%10;
	return u;
}
int main(){
//	freopen("in.txt","r",stdin);
	pw[0]=1;
	for (int i=1;i<=18;++i)
		pw[i]=pw[i-1]*10;
	scanf("%lld%lld",&x,&k);
	ll w=log10(x)+1,t=x/pw[w/2],h=(w+1)/2;
	if (print(t,w&1)>=x)
		--k;
	while (k>0){
		--k;
		++t;
		if (t==pw[h]){
			++w;
			if (w&1^1)
				t=pw[h-1];
			else	
				++h;
		}
	}
	ll ans=print(t,w&1);
	printf("%lld\n",ans);
	return 0;
}

上一题