5 条题解
-
1
正正正正正解
#include<bits/stdc++.h> #define int long long #define PII pair<int,int> #define ULL unsigned long long #define all(v) v.begin(), v.end() #define debug(a) cout<<#a<<"="<<a<<endl; using namespace std; constexpr int N = 1 * 1e6 + 10,M = 5 * 1e3 + 10,inf = 0x3f3f3f3f; int path[N],bin[N]; bool st[N]; set<PII> ans; void dfs2(int u,int sum) { if(sum > 9) return; if(u == 3) { if(sum == 9) { int num[3] = {0},l = 0 , r = bin[0]; for(int i=0;i<3;i++) { for(int j=l;j<r;j++) { num[i] += path[j]; num[i] *= 10; } num[i] /= 10; l += bin[i]; r += bin[i+1]; } // cout << num[0] << ' ' << num[1] << ' ' << num[2] << '\n'; sort(num,num+3,greater<int>()); if(num[0] == num[1]*num[2]) { // printf("%d = %d x %d\n",num[0],num[1],num[2]); ans.insert({num[0],num[1]}); } } return; } for(int i=1;i<=9;i++) { bin[u] = i; dfs2(u+1,sum+i); } } void dfs1(int u) { if(u==9) { dfs2(0,0); return; } for(int i=1;i<=9;i++) { if(st[i]) continue; st[i] = 1; path[u] = i; dfs1(u+1); st[i] = 0; } } void solve() { dfs1(0); vector<PII> res; res.assign(all(ans)); swap(res[1],res[2]); swap(res[3],res[4]); for(auto [a,b] : res) { printf("%d = %d x %d\n",a,a/b,b); } } signed main() { ios::sync_with_stdio(0);cin.tie(nullptr),cout.tie(nullptr); int _=1; // cin>>_; while(_--) { solve(); } return 0; } /** * author: Nijika_jia * created: 2024.12.08 17:58:10 */ ``` ```
信息
- ID
- 4
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 16
- 已通过
- 7
- 上传者