#include<bits/stdc++.h> #define int long long using namespace std; signed main() { string s; cin >> s; sort(s.begin(), s.end()); if (s[0] == '0') { for (int i = 1; i < s.length(); i++) { if (s[i] != '0') { swap(s[0], s[i]); break; } } } cout << s; return 0; }
B.Permute to Minimize
题目描述
给你一个正整数 X 。
将 X (不含前导零)的十进制表示中出现的数字重新排列**,使其没有前导零**,求所有正整数中的最小值。
思路
语法题
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include<bits/stdc++.h> #define int long long usingnamespace std; signedmain() { string s; cin >> s; sort(s.begin(), s.end()); if (s[0] == '0') { for (int i = 1; i < s.length(); i++) { if (s[i] != '0') { swap(s[0], s[i]); break; } } } cout << s; return0; }
C.Candy Tribulation
题目描述
你有无限量的两种糖果:小糖果和大糖果。小糖果的重量是 X 克,大糖果的重量是 Y 克。大糖果比小糖果重(即 X<Y )。
#include<bits/stdc++.h> usingnamespace std; #define int long long signedmain() { int x, y, n; cin >> n >> x >> y; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } int d = __gcd(x, y - x); int m = (y - x) / d; for (int i = 1; i < n; i++) { if (a[i] % m != a[0] % m) { cout << -1; return0; } } int ww = *min_element(a.begin(), a.end(), [&](int a1, int a2) { return a1 * y < a2 * y; }) * y; int w = ww - ((ww - x * a[0]) % (y - x)); if (w < x * a[0]) { w += y - x; } int ans = 0; for (int i = 0; i < n; i++) { int tp = w - x * a[i]; if (tp % (y - x)) { cout << -1; return0; } int l = tp / (y - x); if (l < 0 || l > a[i]) { cout << -1; return0; } ans += l; } cout << ans; return0; }
#include<bits/stdc++.h> usingnamespace std; #define int long long constint mod = 998244353; constint G = 3; intfastpow(int a, int b, int m = mod){ int res = 1; while (b) { if (b & 1) res = (res * a) % m; a = (a * a) % m; b >>= 1; } return res; } voidchange(vector<int> &a, int len){ for (int i = 1, j = len / 2; i < len - 1; i++) { if (i < j) swap(a[i], a[j]); int k = len / 2; while (j >= k) { j -= k; k /= 2; } if (j < k) { j += k; } } } voidntt(vector<int> &a, int len, int x){ change(a, len); for (int h = 2; h <= len; h <<= 1) { int omega = fastpow(G, (mod - 1) / h, mod); if (x == -1) { omega = fastpow(omega, mod - 2, mod); } for (int i = 0; i < len; i += h) { int w = 1; for (int j = i; j < i + h / 2; j++) { int u = a[j]; int v = a[j + h / 2] * w % mod; a[j] = (u + v) % mod; a[j + h / 2] = (u - v + mod) % mod; w = (w * omega) % mod; } } } if (x == -1) { int inv = fastpow(len, mod - 2, mod); for (int i = 0; i < a.size(); i++) { a[i] = (a[i] * inv) % mod; } } } vector<int> convo(vector<int> a, vector<int> b){ if (a.empty() || b.empty()) { return {0}; } int m = 1; int sz = a.size() + b.size() - 1; while (m < sz) { m <<= 1; } a.resize(m, 0); b.resize(m, 0); ntt(a, m, 1); ntt(b, m, 1); for (int i = 0; i < m; i++) { a[i] = a[i] * b[i] % mod; } ntt(a, m, -1); a.resize(sz); return a; } vector<int> fact(555555 + 1), invf(555555 + 1); voidinit() { fact[0] = 1; for (int i = 1; i <= 555555; i++) { fact[i] = fact[i - 1] * i % mod; } invf[555555] = fastpow(fact[555555], mod - 2, mod); for (int i = 555555 - 1; i >= 0; i--) { invf[i] = invf[i + 1] * (i + 1) % mod; } } signedmain() { init(); int n, m; cin >> n >> m; vector<int> a(n), b(m); for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) { cin >> b[i]; } vector<int> cnt1(555555 + 1, 0), cnt2(555555 + 1, 0); for (int i = 0; i < a.size(); i++) { cnt1[a[i]]++; } for (int i = 0; i < b.size(); i++) { cnt2[b[i]]++; } vector<int> g(555555 + 1, 0), h(555555 + 1, 0); for (int i = 0; i <= 555555; i++) { g[i] = cnt2[i] * invf[i] % mod; h[i] = invf[i]; } auto gh = convo(g, h); if (gh.size() > 555555 + 1) { gh.resize(555555 + 1); } int ans = 0; for (int i = 0; i <= 555555; i++) { ans = (ans + (cnt1[i] * fact[i]) % mod * gh[i]) % mod; } cout << ans; return0; }