专栏文章
题解:P13929 [蓝桥杯 2022 省 Java B] 山
P13929题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mio17gof
- 此快照首次捕获于
- 2025/12/02 11:41 3 个月前
- 此快照最后确认于
- 2025/12/02 11:41 3 个月前
搜索题。
数据范围很小,所以直接爆搜。我们首先生成一个单调不减序列作为山的前半部分,通过反转这个序列得到山的后半部分,组合成完整的山。
如果回文数长度为偶数,直接将前半部分和后半部分拼起来即可。
否则,我们省掉后半部分的第一个字符,再将两半拼起来即可。
代码如下。注意检查生成的山的合法性。
CPP#include<bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
ull ans;
const ull L=2022,R=2022222022;
int n;
int a[15];
void dfs(int pos,int last,int len,bool odd){
if(pos==len){
string s;
for(int i=0;i<len;i++)s.push_back('0'+a[i]);
int j=len-1-(odd?1:0);
for(;j>=0;j--)s.push_back('0'+a[j]);
if(s[0]=='0')return;
ull x=0;
for(char c:s)x=x*10+(c-'0');
if(x>=L&&x<=R)ans++;
return;
}
for(int d=last;d<=9;d++){
a[pos]=d;
dfs(pos+1,d,len,odd);
}
}
int main(){
for(int len=2;len<=5;len++){
dfs(0,0,len,false);
dfs(0,0,len,true);
}
cout<<ans;
}
当然,这是一道结果填空题,所以本题的正确答案是 ,也就是上面的代码跑出来的结果。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...