AtCoder abc325 参加メモ

KEYENCE Programming Contest 2023 Autumn(AtCoder Beginner Contest 325) - AtCoder

B - World Meeting

全探索。0時〜23時の時間を決め打ってその時間に最大何人参加できるかを計算する

#include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0;i<n;i++)
#define endl '\n'

int main() {
  int n; cin >> n;
  vector<int> w(n),x(n);
  REP(i,n) cin >> w[i] >> x[i];
  int ans = 0;
  for(int t = 0; t <= 23; t++) {
    int sum = 0;
    REP(i,n) {
      int now = (t + x[i]) % 24;
      if (now >= 9 && now <= 17) sum += w[i];
    }
    ans = max(ans,sum);
  }
  cout << ans << endl;
  return 0;
}

C - Sensors

dfs で連動しているセンサーをチェックする

#include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0;i<n;i++)
#define endl '\n'
using P = pair<int,int>;

const vector<P> moves = {
  {-1,-1}, {-1,0}, {-1,1},
  {0,-1}, {0,1},
  {1,-1}, {1,0}, {1,1}
};

int main() {
  int h,w; cin >> h >> w;
  vector<string> s(h);
  REP(i,h) cin >> s[i];

  vector visited(h,vector<bool>(w));
  auto dfs = [&](auto self, int i, int j) -> void {
    if (visited[i][j]) return;
    visited[i][j] = true;

    for(auto [di,dj]: moves) {
      int ni = i+di, nj = j+dj;
      if (ni < 0 || nj < 0 || ni >= h || nj >= w) continue;
      if (s[ni][nj] == '.') continue;
      self(self,ni,nj);
    }
    return;
  };

  int ans = 0;
  REP(i,h) REP(j,w) {
    if (s[i][j] == '.' || visited[i][j]) continue;
    dfs(dfs,i,j);
    ans++;
  }

  cout << ans << endl;
  return 0;
}

D - Printing Machine

#include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0;i<n;i++)
#define endl '\n'
using ll = long long;
const ll LINF = numeric_limits<ll>::max();

int main() {
  int n; cin >> n;
  map<ll,vector<ll>> mp;
  REP(i,n) {
    ll t,d; cin >> t >> d;
    mp[t].push_back(t+d);
  }

  ll t = 0, ans = 0;
  priority_queue<ll, vector<ll>, greater<ll>> q;
  auto f = [&](ll k) {
    while(t < k && q.size()) {
      ll now = q.top(); q.pop();
      if (t <= now) { ans++; t++; }
    }
  };

  for(auto [k,v]: mp) {
    f(k); t = k;
    for(auto nv: v) q.push(nv);
  }
  f(LINF);
  cout << ans << endl;
  return 0;
}

雑感

D 問題でバグらせてしまい、大幅にロス。E は十分に時間があれば解けた問題だったなあ。悔しい

tic40さんのキーエンスプログラミングコンテスト2023秋(AtCoder Beginner Contest 325)での成績:1994位
パフォーマンス:1090相当
レーティング:1160→1153 (-7) :(
#AtCoder #キーエンスプログラミングコンテスト2023秋(ABC325) https://atcoder.jp/users/tic40/history/share/abc325?lang=ja