- 分享
- @ 2025-10-13 19:58:25
题目传送门
这个题和优美数对是一场比赛。当时优美数对吃了我太多时间,这个题没有时间思考了。
这个题目放在T2有点难了!
正解
这给题目数据非常大,但是数位其实没有多少。
我们便可以dfs……
然后每连续两位一起考虑。
如果当前\(n\)大于\(r\)了,那么直接return。否则如果大于等于\(l\),并且是十三的倍数,那么答案就加一!
代码十分巧妙
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll l,r,power[15],n=0;
int ans=0;
void dfs(int u){
if(n>r) return ;
if(n>=l&&n%13==0){
ans++;
}
for(int i=1;i<=9;i++){
n+=power[u*2-1]*i+(10-i)*power[u*2-2];
dfs(u+1);
n-=power[u*2-1]*i+(10-i)*power[u*2-2];
}
}
int main(){
cin.tie(0)->sync_with_stdio(0);
freopen("bai.in","r",stdin);
freopen("bai.out","w",stdout);
cin>>l>>r;
power[0]=1;
for(int i=1;i<=12;i++) power[i]=power[i-1]*10;
dfs(1);
cout<<ans<<endl;
}
Tips:pow有可能比较慢,会被卡掉,所以我比较推荐自己提前算哈
0 条评论
目前还没有评论...