当前位置:   article > 正文

【Codeforces】 Codeforces Round 873 (Div. 2) (ABC)(+63!!!)_codeforces round 873 (div. 1)

codeforces round 873 (div. 1)

Divisible Array

解题思路

1+2+3+4+...+n=\frac{n(n+1)}{2}

2+4+6+...+n=n(n+1)

很明显第二个式子满足题目条件

参考代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define cy cout << "YES" << endl
  5. #define cn cout << "NO" << endl
  6. #define forn(i, l, r) for (int i = l; i <= r; i++)
  7. #define fornk(i, l, r, k) for (int i = l; i <= r; i += k)
  8. const int N = 2e5 + 5;
  9. ll T;
  10. ll n;
  11. ll a[N];
  12. void solve() {
  13. cin >> n;
  14. forn(i, 1, n) cout << 2 * i << ' ';
  15. cout << endl;
  16. }
  17. int main() {
  18. ios_base::sync_with_stdio(0);
  19. cin.tie(0);
  20. cout.tie(0);
  21. T = 1;
  22. cin >> T;
  23. while (T--) solve();
  24. return 0;
  25. }

Permutation Swap

解题思路

\left | a_i-i \right | 就是a_i离正确位置的距离,题目让我们求使用最大的移动步数移动全部到正确的位置,那么这个最大移动距离的既是所有\left | a_i-i \right |最大公约数

参考代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define cy cout << "YES" << endl
  5. #define cn cout << "NO" << endl
  6. #define forn(i, l, r) for (int i = l; i <= r; i++)
  7. #define fornk(i, l, r, k) for (int i = l; i <= r; i += k)
  8. const int N = 2e5 + 5;
  9. ll T;
  10. ll n;
  11. ll a[N];
  12. ll ans;
  13. void solve() {
  14. ans = 0;
  15. cin >> n;
  16. forn(i, 1, n) cin >> a[i];
  17. forn(i, 1, n) ans = __gcd( abs(a[i] - i), ans);
  18. cout << ans << endl;
  19. }
  20. int main() {
  21. ios_base::sync_with_stdio(0);
  22. cin.tie(0);
  23. cout.tie(0);
  24. T = 1;
  25. cin >> T;
  26. while (T--) solve();
  27. return 0;
  28. }

Counting Orders

解题思路

我们定义数组c为a数组中严格大于b_i的个数,那么从从第一个数开始我们有c_1个数可以选,接下来是选c_2-1,...c_3-2那么答案既是  \prod_{i=1}^{n} {c_i-i+1},注意对c_i小于1的情况特判

参考代码 

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define cy cout << "YES" << endl
  5. #define cn cout << "NO" << endl
  6. #define forn(i, l, r) for (int i = l; i <= r; i++)
  7. #define fornk(i, l, r, k) for (int i = l; i <= r; i += k)
  8. #define forn_(i, l, r) for (int i = l; i >= r; i--)
  9. #define fornk_(i, l, r, k) for (int i = l; i >= r; i -= k)
  10. const int N = 2e5 + 5;
  11. ll T;
  12. ll n;
  13. ll a[N], b[N], c[N];
  14. ll ans;
  15. ll mod = 1e9 + 7;
  16. bool cmp(ll a, ll b) {
  17. return a > b;
  18. }
  19. void solve() {
  20. ans = 1;
  21. cin >> n;
  22. forn(i, 1, n) cin >> a[i];
  23. forn(i, 1, n) cin >> b[i];
  24. sort(a + 1, a + n + 1, cmp);
  25. sort(b + 1, b + 1 + n);
  26. ll cnt = n;
  27. forn(i, 1, n) {
  28. while (a[cnt] <= b[i]) cnt--;
  29. c[i] = cnt;
  30. }
  31. cnt = 0;
  32. forn_(i, n, 1) {
  33. if (c[i] - cnt < 1) ans = 0;
  34. ans *= (c[i] - cnt++);
  35. ans %= mod;
  36. }
  37. cout << ans << endl;
  38. }
  39. int main() {
  40. ios_base::sync_with_stdio(0);
  41. cin.tie(0);
  42. cout.tie(0);
  43. T = 1;
  44. cin >> T;
  45. while (T--) solve();
  46. return 0;
  47. }

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

闽ICP备14008679号