社区讨论
全WA悬关求调
P2657[SCOI2009] windy 数参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m65wub18
- 此快照首次捕获于
- 2025/01/21 11:23 去年
- 此快照最后确认于
- 2025/11/04 11:09 4 个月前
CPP
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll;
inline ll read(){
ll f=1,sum=0;char c=getchar();
while(!isdigit(c)) {if(c=='-') f=-1;c=getchar();}
while(isdigit(c)) {sum=sum*10+c-'0';c=getchar();}
return sum*f;
}
int dp[15][15],b[15],a[15];
int dfs(int pos,int num,bool flag1,bool flag2){
if(!flag1 && !flag2 && dp[pos][num]!=-1) return dp[pos][num];
if(pos==0) return 1;
int l=0,r=9;
if(flag1) r=a[pos-1];
int tot=0;
for(int i=l;i<=r;i++){
if(abs(num-i)<2 && !flag2) continue;
tot+=dfs(pos-1,i,flag1 && (i==r),flag2 && (i==l));
}
if(!flag2 && !flag1) dp[pos][num]=tot;
return tot;
}
int sol(int r){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int id=0;
while(r){
b[++id]=r%10;
r/=10;
}
int p=id;
for(int i=1;i<=id;i++) a[i]=b[id-i+1];
return dfs(p+1,0,1,1);
}
int main(){
memset(dp,-1,sizeof(dp));
int l,r;
cin>>l>>r;
int ans=sol(r)-sol(l-1);
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...