P10024 「HCOI-R1」报名人数 题解

话说你谷主题库的题目编号都有 5 位数了(震惊)

形式化题意

[i,j](lijr)[i, j](l \le i \le j \le r) 的区间内,使所有相邻的数所用的小木棒都相等,求 ji+1j - i + 1 的最大值。

小木棒个数:对于数位分别取 090 \sim 9,该数位对应所用的短竖线数量分别是 6,2,5,5,4,5,6,3,7,66, 2, 5, 5, 4, 5, 6, 3, 7, 6

解题思路

观察发现:相邻的两个自然数,它们最多只有两位不同:个位和十位。

而若一个数的末位是 2 的话,则它的下一个数的末位是 3 是必然的,而它们两个的小木棒个数是相等的。

所以得出结论:若 lr10l - r \geqslant 10,则改区间内一定有一对 i,ji, j 符合条件。

但是再次观察表格发现,没有相邻的三个数,它们所使用的小木棒个数相等。

所以 ji+1j - i + 1 的最大值为 2。

至于 lr<10l - r \lt 10 的时候,直接暴力就得了。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<bits/stdc++.h>
using namespace std;
long long l,r;
map<char,int>mp;
int val(long long k){
int ans=0;
while(k){
ans+=mp[k%10];
k/=10;
}
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
char idx=0;
for(int a:{6,2,5,5,4,5,6,3,7,6}) mp[idx++]=a;
cin>>l>>r;
if(l-r>=10) cout<<2;
else{
for(long long i=l;i<r;++i){
if(val(i)==val(i+1)){
cout<<2;
return 0;
}
}
cout<<1;
}
return 0;
}

P10024 「HCOI-R1」报名人数 题解
https://www.lzj-blog.top/2023/12/25/P10024 「HCOI-R1」报名人数 题解/
作者
lzj
发布于
2023年12月25日
许可协议