社区讨论
求调0pts
P13085[SCOI2009] windy 数(加强版)参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mjdzo43r
- 此快照首次捕获于
- 2025/12/20 15:40 2 个月前
- 此快照最后确认于
- 2025/12/22 16:25 2 个月前
救救我,全WA
CPP#include<bits/stdc++.h>
//因为爱,所以坚持
using namespace std;
#define I return
#define love 0
#define coding
#define int long long
int l,r,f[25][25],sum[25],a[25];
int work(int x){
int cnt = 0,ans = 0;
for(;x;x/=10) a[++cnt] = x%10;
ans+=sum[cnt-1];
for(int i = 1;i < a[cnt];i++) ans+=f[cnt][i];
for(int i = cnt-1;i;i--){
for(int j = 0;j < a[i];j++)
if(abs(j-a[i+1]) > 1) ans+=f[i][j];
if(abs(a[i+1]-a[i]) < 2) break;
}
return ans;
}
inline long long rd(){
int x = 0,f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){
if(ch == '-') f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
x = x*10+ch-'0';
ch = getchar();
}
return x*f;
}
inline void wt(long long x){
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9) wt(x/10);
putchar(x%10+'0');
}
signed main(){
// freopen("data.in","r",stdin);
// freopen("task.out","w",stdout);
l = rd(),r = rd();
for(int i = 0;i < 10;i++) f[1][i] = 1;
sum[0] = 1,sum[1] = 10;
for(int i = 2;i <= 15;i++){
for(int j = 0;j < 10;j++)
for(int k = 0;k < 10;k++)
if(abs(j-k) > 1) f[i][j]+=f[i-1][k];
sum[i] = sum[i-1];
for(int j = 1;j < 10;j++) sum[i]+=f[i][j];
}
wt(work(r+1)-work(l));
I love coding;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...