当前位置:   article > 正文

Codeforces Round 863 (Div. 3)_codeforce div3 #863

codeforce div3 #863

Dashboard - Codeforces Round 863 (Div. 3) - Codeforces

这场比赛我打的不太好,所以我准备写个题解总结一下。

A 题,这个题说是找出插入数字的地方使得这个 n + 1 位数字最大,我们首先会想到的就是找出比这个数比这个数小的第一个数然后在它的前面插入就行。记得插完之后记录一下,防止重复输出。

代码:

  1. #include <bits/stdc++.h>
  2. #include <iomanip>
  3. #define int long long
  4. using namespace std;
  5. void solve() {
  6. int n, k;
  7. cin >> n >> k;
  8. string s;
  9. cin >> s;
  10. bool flag = false;
  11. for (int i = 0; i < n; i ++) {
  12. if (!flag && (s[i] - '0') < k) {cout << k << s[i]; flag = true;}
  13. else cout << s[i];
  14. }
  15. if (!flag) cout << k;
  16. cout << "\n";
  17. }
  18. signed main() {
  19. ios::sync_with_stdio(false);
  20. cin.tie(nullptr);
  21. cout.tie(nullptr);
  22. int t;
  23. cin >> t;
  24. while (t --) {
  25. solve();
  26. }
  27. return 0;
  28. }

B

找离墙最近的就行

代码

  1. #include <bits/stdc++.h>
  2. main()
  3. {
  4. int t; std::cin >> t;
  5. while (t--)
  6. {
  7. int n, x1, y1, x2, y2;
  8. std::cin >> n >> x1 >> y1 >> x2 >> y2;
  9. int a = std::min({x1, y1, n + 1 - x1, n + 1 - y1});
  10. int b = std::min({x2, y2, n + 1 - x2, n + 1 - y2});
  11. std::cout << std::abs(a - b) << "\n";
  12. }
  13. return 0;
  14. }

C

先放两边,再放中间

  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. signed main() {
  5. int t;
  6. cin >> t;
  7. while (t--) {
  8. int n;
  9. cin >> n;
  10. vector<int> b(n - 1), a(n, -1);
  11. for (int i = 0; i < n - 1; i ++) cin >> b[i];
  12. for (int i = 0; i < n; i ++) {
  13. if (!i) {
  14. a[i] = b[i];
  15. }
  16. else if (i == n - 1) {
  17. a[i] = b[i - 1];
  18. }
  19. else a[i] = min(b[i], b[i - 1]);
  20. }
  21. for (int i = 0; i < n; i ++) cout << a[i] << " \n"[i == n - 1];
  22. }
  23. return 0;
  24. }

D

代码

  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. /*
  5. 长宽分别是 f[n], f[n + 1]
  6. */
  7. constexpr int N = 50;
  8. int f[N];
  9. bool dfs(int n, int x, int y)
  10. {
  11. if (!n) return true;
  12. if (y > f[n]) return dfs(n - 1, f[n + 1] - y + 1, x);
  13. if (y <= f[n - 1]) return dfs(n - 1, y, x);
  14. return false;
  15. }
  16. void solve()
  17. {
  18. int n, x, y; cin >> n >> x >> y;
  19. cout << (dfs(n, x, y) ? "YES" : "NO") << "\n";
  20. }
  21. signed main()
  22. {
  23. f[0] = f[1] = 1;
  24. for (int i = 2; i <= 45; i ++)
  25. f[i] = f[i - 1] + f[i - 2];
  26. int t; cin >> t;
  27. while (t--)
  28. {
  29. solve();
  30. }
  31. return 0;
  32. }

代码

这道题可以看成一个九进制的数

  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. void solve()
  5. {
  6. int k; cin >> k;
  7. string ans = "";
  8. while (k)
  9. {
  10. int a = k % 9;
  11. if (a < 4) ans += a + '0';
  12. else ans += a + 1 + '0';
  13. k /= 9;
  14. }
  15. reverse(ans.begin(), ans.end());
  16. cout << ans << "\n";
  17. }
  18. signed main()
  19. {
  20. int t; cin >> t;
  21. while (t --)
  22. {
  23. solve();
  24. }
  25. return 0;
  26. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1004002
推荐阅读
相关标签
  

闽ICP备14008679号