首页 > 其他分享 >2022 icpc 济南 (2022 International Collegiate Programming Contest, Jinan Site)

2022 icpc 济南 (2022 International Collegiate Programming Contest, Jinan Site)

时间:2022-12-27 17:56:01浏览次数:64  
标签:Contest int maybe tt Jinan cin ++ 2022 using

链接:https://codeforc.es/gym/104076

A. Tower

枚举最后的取值,然后计算每个数变成这个取值的最⼩次数,去掉最大的 \(m\) 个,取 \(\min\)。

C++ Code
#include "bits/stdc++.h"

using namespace std;
using i64 = long long;

// constexpr int M = 998244353;
// constexpr int M = 1000000007;

void solve() {
  int n, m;
  cin >> n >> m;
  vector<int> a(n);
  set<int> s;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    int x = a[i];
    while (x) {
      s.insert(x);
      x >>= 1;
    }
  }
  i64 ans = 9E18;
  for (auto aim : s) {
    auto get = [&](int x) {
      if (x - aim <= 0) {
        return aim - x;
      }
      int res = 0;
      while (x / 2 >= aim) {
        x /= 2;
        res++;
      } 
      int tmp = res + x - aim;
      if (x / 2 > 0) {
        x /= 2;
        return min(tmp, res + 1 + aim - x);
      } else {
        return tmp;
      }
    };
    vector<int> tmp;
    for (int i = 0; i < n; i++) {
      tmp.push_back(get(a[i]));
    }
    sort(tmp.begin(), tmp.end());
    i64 res = 0;
    for (int i = 0; i < n - m; i++) {
      res += tmp[i];
    }
    ans = min(ans, res);
  }
  cout << ans << '\n';
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int tt = 1;
  cin >> tt;
  while (tt--) {
    solve();
  }
  return 0;
}

D. Frozen Scoreboard

模拟,直接枚举子集。贪心分配时间。

C++ Code
#include "bits/stdc++.h"

using namespace std;
using i64 = long long;

void solve() {
  int n, m;
  cin >> n >> m;
  vector<int> a(n), b(n);
  for (int i = 0; i < n; i++) {
    cin >> a[i] >> b[i];
    vector<char> ch(m);
    vector<int> x(m), y(m);
    int time = 0;
    int cnt = 0;
    vector<int> maybe;
    for (int j = 0; j < m; j++) {
      cin >> ch[j];
      char useless;
      if (ch[j] == '+') {
        cin >> x[j] >> useless >> y[j];
        cnt++;
        time += 20 * (x[j] - 1) + y[j];
      } else if (ch[j] == '?') {
        cin >> x[j] >> y[j];
        maybe.push_back(j);
      } else if (ch[j] == '-') {
        cin >> y[j];
      }
    }
    int SIZE = maybe.size();
    bool ok = 0;
    for (int j = 0; j < (1 << SIZE); j++) {
      int tmpcnt = cnt;
      int mn = time, mx = time;
      for (int k = 0; k < SIZE; k++) {
        if (j >> k & 1) {
          tmpcnt++;
          mn += 240 + 20 * (y[maybe[k]] - x[maybe[k]]);
          mx += 299 + 20 * (y[maybe[k]] - 1);
        }
      }
      if (tmpcnt == a[i] && b[i] >= mn && b[i] <= mx) {
        ok = 1;
        b[i] -= mn;
        for (int k = 0; k < SIZE; k++) {
          if (j >> k & 1) {
            int L = 240 + 20 * (y[maybe[k]] - x[maybe[k]]), R = 299 + 20 * (y[maybe[k]] - 1);
            if (b[i] == 0) {
              x[maybe[k]] = y[maybe[k]] - x[maybe[k]] + 1;
              y[maybe[k]] = 240;
            } else if (b[i] >= R - L) {
              x[maybe[k]] = y[maybe[k]];
              y[maybe[k]] = 299;
              b[i] -= (R - L);
            } else {
              for (int l = 0; l < x[maybe[k]]; l++) {
                int p = b[i] - l * 20;
                if (p >= 0 && p <= 59) {
                  x[maybe[k]] = y[maybe[k]] - x[maybe[k]] + l + 1;
                  y[maybe[k]] = 240 + p;
                  b[i] = 0;
                  break;
                }
              }
            }
            ch[maybe[k]] = '+';
          } else {
            ch[maybe[k]] = '-';
          }
        }
        break;
      }
    }
    if (ok) {
      cout << "Yes" << '\n';
      for (int k = 0; k < m; k++) {
        if (ch[k] == '+') {
          cout << ch[k] << ' ' << x[k] << '/' << y[k] << '\n';
        } else if (ch[k] == '-') {
          cout << ch[k] << ' ' << y[k] << '\n';
        } else {
          cout << ch[k] << '\n';
        }
      }
    } else {
      cout << "No" << '\n';
    }
  }
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int tt = 1;
  //cin >> tt;
  for (int _ = 0; _ < tt; _++) {
    solve();
  }
  return 0;
}

E. Identical Parity

先分组,\(\lfloor \frac{n}{k}\rfloor\) 个长度为 \(k\) 的组,\(1\) 个长度为 \((n% k)\) 的组,前面 \(k\) 个组奇数偶数差不多一样多,那么每一组奇数的数量是 \(\lceil \frac{k}{2}\rceil\),偶数的数量是 \(\lfloor \frac{k}{2}\rfloor\),组内可以乱排,就看最后一组行不行。

\(n\) 个数,\(\lfloor \frac{n}{2}\rfloor\) 个偶数,\(\lceil \frac{n}{2}\rceil\) 个奇数。

C++ Code
#include "bits/stdc++.h"

using namespace std;
using i64 = long long;

// constexpr int M = 998244353;
// constexpr int M = 1000000007;

void solve() {
  int n, k;
  cin >> n >> k;
  if (k % 2 == 0) {
    cout << "Yes" << '\n';
    return;
  }
  int odd = (n + 1) / 2 - (k + 1) / 2 * (n / k);
  int even = n / 2 - k / 2 * (n / k);
  if (odd >= 0 && odd <= (k + 1) / 2 && even >= 0 && even <= k / 2) {
    cout << "Yes" << '\n';
    return;
  }
  cout << "No" << '\n';
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int tt = 1;
  cin >> tt;
  while (tt--) {
    solve();
  }
  return 0;
}

K. Stack Sort

签到,只有 \(a_i + 1\) 在前面出现过 \(ans\) 才不用加 \(1\)。

C++ Code
#include "bits/stdc++.h"

using namespace std;
using i64 = long long;

// constexpr int M = 998244353;
// constexpr int M = 1000000007;

void solve() {
  int n;
  cin >> n;
  vector<int> a(n);
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    a[i]--;
  }
  vector<int> vis(n + 1);
  int ans = 0;
  for (int i = 0; i < n; i++) {
    if (!vis[a[i] + 1]) {
      ans++;
    }
    vis[a[i]] = 1;
  }
  cout << ans << '\n';
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int tt = 1;
  cin >> tt;
  while (tt--) {
    solve();
  }
  return 0;
}

M. Best Carry Player

与顺序无关。

C++ Code
#include "bits/stdc++.h"

using namespace std;
using i64 = long long;

// constexpr int M = 998244353;
// constexpr int M = 1000000007;

void solve() {
  int n;
  cin >> n;
  i64 sum = 0;
  i64 ans = 0;
  for (int i = 0; i < n; i++) {
    i64 x;
    cin >> x;
    string s = to_string(x);
    for (auto x : s) {
      ans += x - '0';
    }
    sum += x;
  }
  string s = to_string(sum);
  for (auto x : s) {
    ans -= x - '0';
  }
  cout << ans / 9 << '\n';
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int tt = 1;
  cin >> tt;
  while (tt--) {
    solve();
  }
  return 0;
}

标签:Contest,int,maybe,tt,Jinan,cin,++,2022,using
From: https://www.cnblogs.com/kiddingma/p/17008658.html

相关文章

  • the fifth——2022.12.26
    %c按照ASCII码转换字符  例如: #include<stdio.h>intmain(void){ charch; printf("Pleaseenteracharacter.\n"); scanf("%c",&ch); printf("Thecodefor......
  • 2022年PIE开发者大赛桌面开发组作品展示
    2022年第五届“航天宏图&华为云杯”PIE软件开发者大赛取得了圆满落幕,感谢来自全国各地的高校、科研单位、企业等的积极参与。以下展示一些桌面开发组的优秀作品介绍:特等......
  • 在QQ音乐巅峰榜年度榜单中,听懂国人2022年的音乐记忆!
    拐左为夏,拐右为冬,时至年末,各类形式的年终报告层出不穷。2022年,是特殊的一年,音乐作为不可或缺的一部分,也陪伴广大用户走过了日日夜夜。一首首歌曲拨动着心弦、同时也承载着回......
  • 2022,12.27 新冠初愈后
    新冠初愈后,心情随着身体跌到谷底。不管是工作还是生活。我看到敏敏在下班后还努力工作的身影。我的内心充满了干劲和斗志。我爱她,我要给跟她一起走向幸福的生活。 接......
  • 2022年PIE开发者大赛遥感应用组作品展示
    2022年第五届“航天宏图&华为云杯” PIE软件开发者大赛取得了圆满落幕,感谢来自全国各地的高校、科研单位、企业等的积极参与。以下展示一些参赛的优秀作品介绍:遥感应用......
  • 2022年总结-五年的时间才明白业务的重要性
    一:因起​从事软件开发工作了几年了,总感觉缺少一些"灵魂"的东西,为此很纠结,困惑,一直彷徨不定,很苦恼,以前认为技术很重要,学习和工作的重心都在技术上,了解各种基础的......
  • 2022年12月国内外数据库排名
    DB-Engines数据库流行度排行榜12月更新已发布(排名标准包括搜索系统名称时搜索引擎结果数量、Google趋势、StackOverflow网站、LinkedIn、Twitter等社交网络中提及的情......
  • 2022,烟火如常,布衣剩饭,啥也没干,年终总结,蹈海难酬
    开篇明义,2022年,我啥也没干,或者说的更准确一些,啥也没干成,没有什么值得拿出来凡尔赛一下的事情,或者可以满足一下虚荣心的成就,300多个日夜里,就是日复一日的起床、上班、讲课、......
  • 考研数学练习题-2022年12月26日
    数量:11......
  • 2022-12-26 上证指数不测而测推演 那五种情况 再细节
    确定不测而测的步骤1.确定我们的操作级别,5分钟笔。如果有5分钟笔级别多头萌发,就进入。如果有5分钟笔级别的空头萌发,就退出。2.通过走势多异性,确定这个级别,处的阶段。3......