No.3041 非対称じゃんけん Yukicoder

2025/03/01に公開

問題:https://yukicoder.me/problems/no/3041

解説のc++の想定解法が(私には)難しかったので、Pythonの想定解法のようにできないかと思いstd::bitsetを利用してACしました。

#pragma GCC optimize("O3")

typedef long long ll;
typedef long double ld;

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);

  ll n, f;
  cin >> n >> f;
  vector<ll> a(n), b(n), c(n);

  for (ll i = 0; i < n; i++) {
    cin >> a[i];
  }
  for (ll i = 0; i < n; i++) {
    cin >> b[i];
  }
  for (ll i = 0; i < n; i++) {
    cin >> c[i];
  }
  auto cur = bitset<900001>(1);

  for (ll i = 0; i < n; i++) {
    cur = cur << a[i] | cur << b[i] | cur << c[i];
    cout << cur.count() << '\n';
  }
}

提出コード

ただし、TLEを避けるためには#pragma GCC optimize("O3")を追加する必要がありました。
TLEとなった提出

bitsetの利用で十分高速化されていると思いましたが、よくわかりません。ゴリ押しかもしれません。

Discussion