跳转至

码蹄杯 2026 提高组 初赛 第2场 记录

Info

距离结束还有9分钟,但是已经写不出来了,做了5道,罚时3次,比上次进步了一题,封榜前是696名,总人数5697人,看能不能水到个奖吧

最后排名是823/5000+(不知道一道都没做出来的算不算),希望给个银吧

1 签到

维护最大和最小的x和y的值,计算框出的面积

void solve() {
  int n;
  cin >> n;
  i64 x2 = 0, y2 = 0, x1 = INT_MAX, y1 = INT_MAX;
  while (n --) {
    i64 x, y;
    cin >> x >> y;
    x1 = min(x1, x);
    y1 = min(y1, y);
    x2 = max(x2, x);
    y2 = max(y2, y);
  }
  cout << (x2 - x1) * (y2 - y1) << endl;
}

3 枚举

算出两两之间的距离,找到每列的最大值的最小值

void solve() {
  int n;
  cin >> n;
  auto loc = vector(n, vector(2, 0));
  for (int i = 0; i < n; i ++) cin >> loc[i][0] >> loc[i][1];

  auto time = vector(n, vector(n, 0));

  auto calc = [&](int u, int v) {
    return abs(loc[u][0] - loc[v][0]) + abs(loc[u][1] - loc[v][1]);
  };
  for (int u = 0; u < n; u ++) {
    for (int v = u + 1; v < n; v ++) {
      time[u][v] = calc(u, v);
      time[v][u] = time[u][v];
    }
  }
  int ans = INT_MAX;
  for (int v = 0; v < n; v ++) {
    int cnt = 0;
    for (int u = 0; u < n; u ++) {
      cnt = max(cnt, time[u][v]);
    }
    ans = min(ans, cnt);
  }
  cout << ans << endl;
}

7 贡献法?

最多交换的次数是\(\frac{n(n - 1)m}{2}\),去除掉不用交换的

吃了3发罚时因为i64 ans = n * (n - 1) / 2 * m不能写成i64 ans = n * (n - 1) * m / 2,太狗了

void solve() {
  i64 n, m;
  cin >> n >> m;
  vector<string> maze(n);
  for (int i = 0; i < n; i ++) cin >> maze[i];
  i64 ans = n * (n - 1) / 2 * m;
  for (int c = 0; c < m; c ++) {
    vector<i64> cnt(30);
    for (int r = 0; r < n; r ++) {
      cnt[maze[r][c] - 'a'] ++;
    }
    for (int i = 0; i < 30; i ++) {
      if (cnt[i]) ans -= (cnt[i] * (cnt[i] - 1) / 2);
    }
  }
  cout << ans << endl;
}

8 位运算

void solve() {
  int n;
  cin >> n;
  i64 ans = 0;
  while (n --) {
    int x;
    cin >> x;
    int high = x >> 4;
    int low = (x & 15) << 4;
    ans += high;
    ans += low;
  }
  cout << ans << endl;
}

10 签到

void solve() {
  string s;
  cin >> s;
  int a, b;
  int n = s.size();
  cin >> a>> b;
  for (int i = a; i <= n - 1 - b; i ++) cout << s[i];
  cout << endl;
}

没开出来的

9

贪心 + 01背包 ST表 优先队列,都思考过,但还是没思考出来

玛德,是multiset + upper_bound,完全忘记STL里可以用二分了

set, multiset, map, multimap(这是啥没见过), vector, deque都能用upper_bound

4

树 + 回溯

感觉还要加上组合数学...回溯也要魔改,最后还是没想出来

玛德是树形dp,高攀了高攀了