P8431 「WHOI-2」彗星蜜月

题目背景

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看完这首 mv 的前奏之后你应该知道 fff 是什么鬼了(误)。

题目描述

定义 f(x)f(x)f(x)xxx 的各位数码翻转以后形成的数。

例如:

  • f(12323)=32321f(12323)=32321f(12323)=32321
  • f(114514)=415411f(114514)=415411f(114514)=415411
  • f(250)=52f(250)=52f(250)=52

给定一个 nnn。求最大的 kkk,使得对于所有处于 [1,k][1,k][1,k] 区间中的正整数 mmm,有 f(m)≤nf(m)\leq nf(m)n

输入格式

本题多测

第一行一个正整数 TTT 表示测试点数目。

接下来每个测试点一个正整数 nnn

输出格式

TTT 行,对应每个测试点的答案。

输入输出样例 #1

输入 #1

3
12
991
114514

输出 #1

11
298
100001

输入输出样例 #2

输入 #2

2
99999
99998

输出 #2

100000
99998

说明/提示

对于测试样例 111
f(1)=1,f(2)=2,f(3)=3,f(4)=4,f(5)=5,f(6)=6,f(7)=7,f(8)=8,f(9)=9,f(10)=1,f(11)=11,f(12)=21f(1)=1,f(2)=2,f(3)=3,f(4)=4,f(5)=5,f(6)=6,f(7)=7,f(8)=8,f(9)=9,f(10)=1,f(11)=11,f(12)=21f(1)=1,f(2)=2,f(3)=3,f(4)=4,f(5)=5,f(6)=6,f(7)=7,f(8)=8,f(9)=9,f(10)=1,f(11)=11,f(12)=21。所以 kkk 最大为 111111


本题采用捆绑测试

  • subtask1(10pts):1≤T,n≤103\text{subtask1(10pts)}:1\leq T,n\leq10^3subtask1(10pts):1T,n103
  • subtask2(30pts):1≤n≤106\text{subtask2(30pts)}:1\leq n\leq10^6subtask2(30pts):1n106
  • subtask3(40pts):1≤n≤109\text{subtask3(40pts)}:1\leq n\leq10^9subtask3(40pts):1n109
  • subtask4(20pts):\text{subtask4(20pts)}:subtask4(20pts): 无特殊限制。

对于 100%100\%100% 的数据,1≤T≤105,1≤n≤10181\leq T\leq10^5,1\leq n\leq10^{18}1T105,1n1018

提示:unsigned long long 可以储存 00018,446,744,073,709,551,615(264−1)18,446,744,073,709,551,615(2^{64}-1)18,446,744,073,709,551,615(2641) 的自然数。

C++实现

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
int LEN(LL n) {
	int cnt = 0;
	while (n) cnt++, n /= 10;
	return cnt;	
}
LL f(LL n) {
	LL ans = 0;
	while (n) ans = ans * 10 + (n % 10), n /= 10;
	return ans;
}
void solve(){
	LL n, minn = 9e18;
	scanf("%lld", &n);
	int len = LEN(n);
	for (int i = 0; i <= len; i++)
	{
		LL p = pow(10, (LL)i); //第 i 位加一。 
		LL ni = n - (n % p) + p; //后面的位全部变成 0。 
		if (ni % 10 == 0) ni++;  // 最后一位变成 1。 
		minn = min(minn, f(ni));
	}
	printf("%lld\n", minn - 1);
}
int main(){
    int T;
    scanf("%d", &T);
    while (T--) solve();
    return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

更多推荐