社区讨论

求调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 条回复,欢迎继续交流。

正在加载回复...