제출 #667752

#제출 시각아이디문제언어결과실행 시간메모리
667752I_love_Chou_GiangLongest beautiful sequence (IZhO17_subsequence)C++14
23 / 100
48 ms436 KiB
#include "bits/stdc++.h"
using namespace std;

typedef long long ll;

#define vt vector
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()

#define R_EP(i, a, b, s) for (int i = (a); (s) > 0 ? i < (b) : i > (b); i += (s))
#define R_EP1(e) R_EP(i, 0, e, 1)
#define R_EP2(i, e) R_EP(i, 0, e, 1)
#define R_EP3(i, b, e) R_EP(i, b, e, 1)
#define R_EP4(i, b, e, s) R_EP(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define R_EPC(...) GET5(__VA_ARGS__, R_EP4, R_EP3, R_EP2, R_EP1)
#define rep(...) R_EPC(__VA_ARGS__)(__VA_ARGS__)
#define trav(x, a) for (auto x : a) 

template<typename T> inline bool umax(T&x, const T& y) { if (x >= y) return false; x = y; return true; }
template<typename T> inline bool umin(T&x, const T& y) { if (x <= y) return false; x = y; return true; }

const int MOD = int(1e9) + 7;

int n, a[5005], k[5005];

namespace Sub2 {
  int dp[5005], pre[5005], end, ans;
  void tst() {
    rep(i, n) {
      pre[i] = i;
      rep(j, i) {
        if (__builtin_popcount(a[i] & a[j]) == k[i]) {
          if (umax(dp[i], dp[j] + 1)) {
            pre[i] = j;
          }
        }
      }
      if (umax(ans, dp[i])) {
        end = i;
      }
    }

    vt<int> path;
    for (int i = 0; i <= ans; end = pre[end], ++i) path.pb(end);

    cout << ans + 1 << "\n";
    reverse(all(path));
    trav(v, path) cout << v + 1 << " ";
    cout << "\n";
  }
};

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

  cin >> n;
  rep(i, n) cin >> a[i];
  rep(i, n) cin >> k[i];

  if (n <= 5000) Sub2::tst();

  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...