A. Reachable Numbers
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Let's denote a function f(x)f(x) in such a way: we add 11 to xx, then, while there is at least one trailing zero in the resulting number, we remove that zero. For example,
- f(599)=6f(599)=6: 599+1=600→60→6599+1=600→60→6;
- f(7)=8f(7)=8: 7+1=87+1=8;
- f(9)=1f(9)=1: 9+1=10→19+1=10→1;
- f(10099)=101f(10099)=101: 10099+1=10100→1010→10110099+1=10100→1010→101.
We say that some number yy is reachable from xx if we can apply function ff to xx some (possibly zero) times so that we get yy as a result. For example, 102102 is reachable from 1009810098 because f(f(f(10098)))=f(f(10099))=f(101)=102f(f(f(10098)))=f(f(10099))=f(101)=102; and any number is reachable from itself.
You are given a number nn; your task is to count how many different numbers are reachable from nn.
Input
The first line contains one integer nn (1≤n≤10^9).
Output
Print one integer: the number of different numbers that are reachable from nn.
Examples
input
Copy
1098
output
Copy
20
input
Copy
10
output
Copy
19
Note
The numbers that are reachable from 1098 are:
1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,1098,1099.
题意:
这题就是给你一个数,然后有一个操作定义位f(x),就是将这个数加一也就是f(x)=x+1,然后如果这个数的结尾是0那么就将这个零删除,然后,问你最多可以得到多少个不同的数,你可以随意的使用f来进行嵌套,知道当这个变成前面出现过的数就结束。
题意:
这题其实最大数不会结果不会很大,那么就可以直接模拟了。
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std ;
set<int> s ;
int main()
{
int n ;
scanf("%d" , &n) ;
s.clear() ;
s.insert(n) ;
int tmp = n + 1 ;
while(!(tmp % 10)) tmp /= 10 ;
while(!s.count(tmp))
{
s.insert(tmp) ;
tmp += 1 ;
while(!(tmp % 10)) tmp /= 10 ;
}
printf("%d\n" , s.size()) ;
return 0 ;
}
B. Long Number
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given a long decimal number aa consisting of nn digits from 11 to 99. You also have a function ff that maps every digit from 11 to 99 to some (possibly the same) digit from 11 to 99.
You can perform the following operation no more than once: choose a non-empty contiguous subsegment of digits in aa, and replace each digit xx from this segment with f(x)f(x). For example, if a=1337a=1337, f(1)=1f(1)=1, f(3)=5f(3)=5, f(7)=3f(7)=3, and you choose the segment consisting of three rightmost digits, you get 15531553 as the result.
What is the maximum possible number you can obtain applying this operation no more than once?
Input
The first line contains one integer nn (1≤n≤2⋅1051≤n≤2⋅105) — the number of digits in aa.
The second line contains a string of nn characters, denoting the number aa. Each character is a decimal digit from 11 to 99.
The third line contains exactly 99