社区讨论
90分求调
P2657[SCOI2009] windy 数参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo8m6s3n
- 此快照首次捕获于
- 2023/10/27 20:53 2 年前
- 此快照最后确认于
- 2023/10/27 20:53 2 年前
CPP
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a,b;
int f[11][11];
int work(int x){
if(!x)return 1;
int a[11]={},cnt=0;
while(x)a[++cnt]=x%10,x/=10;
int ans=0;
for(int i=1;i<cnt;i++){
for(int j=1;j<=9;j++)ans+=f[i][j];
}
for(int i=1;i<a[cnt];i++)ans+=f[cnt][i];
for(int i=cnt-1;i>=1;i--){
for(int j=0;j<a[i];j++){
if(abs(a[i+1]-j)>=2)ans+=f[i][j];
}
if(abs(a[i+1]-a[i])<2)break;
}
return ans;
}
void init(){
for(int i=0;i<=9;i++)f[1][i]=1;
for(int i=2;i<=9;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
if(abs(j-k)>=2)f[i][j]+=f[i-1][k];
}
}
}
}
int main()
{
init();
cin>>a>>b;
cout<<work(b+1)-work(a);
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...