查看原帖
1033480
LiujunjiaNC楼主2025/1/12 15:32

为什么 ll sovle()忘记写return,不开O2可以AC https://www.luogu.com.cn/record/197888498

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
int nbit[30];
ll dp[30][30];
ll dfs(int pos,ll val,bool lead,bool limit){
	if(pos==0)return 1;
	int len = limit?nbit[pos]:9;
	if(!limit&&!lead&&dp[pos][val]) return dp[pos][val];
	ll ans = 0;
	for(int i=0;i<=len;i++){
        if(abs(i-val)<2&&!lead)continue;
		ans += dfs(pos-1,i,i==0&&lead,limit&&i==len);
	}
	if(!limit&&!lead)dp[pos][val] = ans;
	return ans;
}
ll sovle(ll n,int id){
	int pos = 0;
	while(n){
		nbit[++pos] = n%10;
		n /= 10;
	}
	dfs(pos,0,1,1);
}

int main(){
	ll a,b;
	cin>>a>>b;
	cout<<sovle(b,1)-sovle(a-1,0)<<endl;   
   
}
2025/1/12 15:32
加载中...