「題解」Codeforces Round 883 (Div. 3)

A. Escalator Conversations

Problem

[題目](Rudolph and Cut the Rope)

Sol & Code

繩子長度大於釘子高度的要剪

#include <bits/stdc++.h>

typedef long long ll;

int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }

int T, n;

int main() {
  scanf("%d", &T);
  while (T--) {
    scanf("%d", &n);
    int a, b, ans = 0;
    for (int i = 1; i <= n; ++i) {
      scanf("%d %d", &a, &b);
      if (a > b) ++ans;
    }
    printf("%d\n", ans);
  }
  return 0;
}

B. Rudolph and Tic-Tac-Toe

Problem

題目

Sol & Code

簽到。

#include <bits/stdc++.h>

typedef long long ll;

int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }

int T;
std::string s[4];

bool solve(char c) {
  for (int i = 1; i <= 3; ++i) {
    for (int j = 0; j < 3; ++j) {
      if (s[i][j] != c) break;
      if (j == 2) return true;
    }
  }
  for (int j = 0; j < 3; ++j) {
    for (int i = 1; i <= 3; ++i) {
      if (s[i][j] != c) break;
      if (i == 3) return true;
    }
  }
  if (s[1][0] == s[2][1] && s[1][0] == s[3][2] && s[1][0] == c) return true;
  if (s[1][2] == s[2][1] && s[1][2] == s[3][0] && s[1][2] == c) return true;
  return false;
}

int main() {
  scanf("%d", &T);
  while (T--) {
    std::cin>>s[1];
    std::cin>>s[2];
    std::cin>>s[3];
    if (solve('O')) puts("O");
    else if (solve('X')) puts("X");
    else if (solve('+')) puts("+");
    else puts("DRAW");
  }
  return 0;
}

C. Rudolf and the Another Competition

Problem

題目

Sol & Code

簽到

但是我爆 \(int\)

#include <bits/stdc++.h>
#define N 200001

typedef long long ll;

int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }

int T, n, m, h, a[N];
struct qwq {
  int p, id;
  ll c;
  friend bool operator < (qwq q1, qwq q2) {
    if (q1.p == q2.p) {
      if (q1.c == q2.c) return q1.id < q2.id;
      return q1.c < q2.c;
    }
    return q1.p > q2.p;
  }
}rk[N];

int main() {
  scanf("%d", &T);
  while (T--) {
    scanf("%d %d %d", &n, &m, &h);
    for (int i = 1; i <= n; ++i) {
      rk[i].id = i, rk[i].p = 0, rk[i].c = 0;
      for (int j = 1; j <= m; ++j) scanf("%d", &a[j]);
      std::sort(a + 1, a + m + 1);
      for (int j = 1; j <= m; ++j) {
        a[j] += a[j - 1];
        if (a[j] <= h) ++rk[i].p, rk[i].c += a[j];
        else break;
      }
    }
    std::sort(rk + 1, rk + n + 1);
    for (int i = 1; i <= n; ++i) {
      if (rk[i].id == 1) { printf("%d\n", i); break; }
    }
  }
  return 0;
}

D. Rudolph and Christmas Tree

Problem

題目

Sol & Code

從上向下算面積處理重複即可。

#include <bits/stdc++.h>
#define N 200001

typedef long long ll;

int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }

int T, n, d, h, a[N];

int main() {
  scanf("%d", &T);
  while (T--) {
    scanf("%d %d %d", &n, &d, &h);
    for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    int last = 2147483647;
    double ans = 0;
    for (int i = n; i >= 1; --i) {
      if (a[i] + h > last) {
        double bili = 1.0 * (a[i] + h - last) / h;
        ans += (1.0 - bili * bili) * d * h / 2.0;
      } else ans += 1.0 * d * h / 2.0;
      last = a[i];
    }
    printf("%0.7lf\n", ans);
  }
  return 0;
}

E1. Rudolf and Snowflakes (simple version)

Problem

題目

Sol & Code

雪花是一顆深度大於 \(2\) 的滿 \(k\) 叉樹,因節點總數 \(n\) 很小,可以暴力判斷。

#include <bits/stdc++.h>

typedef long long ll;

int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }

ll n;
int T;

int main() {
  scanf("%d", &T);
  while (T--) {
    scanf("%lld", &n);
    bool okay = false;
    for (ll i = 2; i < n; ++i) {
      if (i * i + i + 1 > n) break;
      if (i * i + i + 1 == n) { okay = true; break; }
      if (n - 1)
    }
    puts(okay ? "YES" : "NO");
  }
  return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章