社区讨论

逆天代码射出一堆0(求调教)

灌水区参与者 8已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@m059t3vt
此快照首次捕获于
2024/08/22 20:40
2 年前
此快照最后确认于
2024/08/22 20:45
2 年前
查看原帖

题目

代码:

CPP
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
template<typename T>void re(T&x){x = 0; int sign = 1; char c; do{c = getchar(); if(c == '-') sign = -1;}while(!isdigit(c)); do{x = x * 10 + c - '0'; c = getchar();}while(isdigit(c)); x *= sign;}
void write(int x){if (x < 0) putchar('-'); else if (x < 10) putchar(x + '0'); else write(x / 10), putchar(x % 10 + '0');}

const int N = 14;
int l, r, a[N];
int dfs(int now, bool k1, int k2){
	if (now == 0) return 1;
	int t = k1 ? 9 : a[now];
	int ans = 0;
	for (int i = 0; i <= t; i ++){
		if (i == k2 + 1 || i == k2 - 1 || i == k2) continue;
		else ans += dfs(now - 1, k1 || (i != t), i);
	}
	return ans;
}
int solve(int x){
	memset(a, 0, sizeof a);
	int len = 0;
	while (x){
		a[++ len] = x % 10;
		x /= 10;
	}
	return dfs(9, 0, 114514);
}
int main(){
	re(l), re(r);
	printf("%lld", solve(r) - solve(l - 1));
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...