疑似753数正解(
2024-12-24 22:53:33
发布于:广东
#include <iostream>
#include <cstdio>
#pragma GCC optimize(2)
#define int long long
#define rep(i) for(char i:arr)
#define f(a, b, c, d) (a + b * 10ll + c * 100ll + d * 1000ll)
#define f2(a, b, c, d, cc) (a != cc && b != cc && c != cc && d != cc)
using namespace std;
char arr[]{3, 5, 7};
int _;
int dfs(int cur, bool _3, bool _5, bool _7){//远古dfs代码
if(cur > _) return 0;
if(cur == _) return (_3 && _5 && _7);
return (_3 && _5 && _7) + dfs(cur * 10 + 3, 1, _5, _7) + dfs(cur * 10 + 5, _3, 1, _7) + dfs(cur * 10 + 7, _3, _5, 1);
}
signed main(){
cin.tie(nullptr) -> sync_with_stdio(0);
cout.tie(nullptr) -> sync_with_stdio(0);
cin >> _;
if(_ >= 10000000000000000ll){
int ans = 64176918;//打表前16位数的数量
rep(q) rep(p) rep(o) rep(n)
rep(m) rep(l) rep(k) rep(j)
rep(i) rep(h) rep(g) rep(f)
rep(e) rep(d) rep(c) rep(b)
rep(a){//暴力枚举17位数
int tmp =
f(a, b, c, d) +
f(e, f, g, h) * 10000ll +
f(i, j, k, l) * 100000000ll +
f(m, n, o, p) * 1000000000000ll +
q * 10000000000000000ll;
if(tmp <= _){
bool flag = 1;
if(f2(a, b, c, d, 3) && f2(e, f, g, h, 3) && f2(i, j, k, l, 3) && f2(m, n, o, p, 3) && q != 3) flag = 0;
else if(f2(a, b, c, d, 5) && f2(e, f, g, h, 5) && f2(i, j, k, l, 5) && f2(m, n, o, p, 5) && q != 5) flag = 0;
else if(f2(a, b, c, d, 7) && f2(e, f, g, h, 7) && f2(i, j, k, l, 7) && f2(m, n, o, p, 7) && q != 7) flag = 0;
ans += flag;
}else break;
}
cout << ans;
return 0;
}
cout << dfs(0, 0, 0, 0);
return 0;
}
全部评论 7
?
2024-12-25 来自 广东
0居然见到比我集训营同学更炸裂的
2024-12-25 来自 广东
0顶
2024-12-25 来自 湖南
0所以这是什么(
2024-12-25 来自 湖南
0打表+循环优化
2024-12-25 来自 广东
0
顶
2024-12-25 来自 四川
0顶
2024-12-24 来自 广东
0顶
2024-12-24 来自 广东
0
有帮助,赞一个