提出 #3661491


ソースコード 拡げる

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

#define int long long

int N, K;
int a[1111];
vector<int> cand;

// 渡されたbitを含む部分列の個数をカウントする
int countMask(int a) {
   int ret = 0;
   for (int x : cand) {
      if ((x & a) == a) { // これ頭良い
         ret++;
      }
   }
   return ret;
}

signed main() {
   // 入力
   cin >> N >> K;
   for (int i = 0; i < N; i++) {
      cin >> a[i];
   }

   // 部分列全列挙
   for (int i = 0; i < N; i++) {
      int sum = 0;
      for (int j = i; j < N; j++) {
         sum += a[j];
         cand.push_back(sum);
      }
   }

   int mask = 0; // これが答えになる。条件を満たすbitをここに付け加えてく
   for (int i = 40; i >= 0; i--) {
      if (countMask(mask | (1LL << i)) >= K) {
         mask |= (1LL << i);
      }
   }

   cout << mask << endl;

   return 0;
}

提出情報

提出日時
問題 B - Sum AND Subarrays
ユーザ nomi
言語 C++14 (GCC 5.4.1)
得点 400
コード長 928 Byte
結果
実行時間 24 ms
メモリ 6384 KB

ジャッジ結果

セット名 得点 / 配点 テストケース
All 400 / 400 n-large-k-small1, n-large-k-small2, n-large-k-small3, n-large-k-small4, n-large-k-small5, n-medium-1, n-medium-2, n-medium-3, n-medium-4, n-medium-5, n-medium-6, n-medium-7, n-medium-k-small-1, n-medium-k-small-2, n-small-1, n-small-2, n-small-3, nk-large-1, nk-large-2, sample_01, sample_02
ケース名 結果 実行時間 メモリ
n-large-k-small1 24 ms 4720 KB
n-large-k-small2 24 ms 5872 KB
n-large-k-small3 24 ms 4976 KB
n-large-k-small4 24 ms 5232 KB
n-large-k-small5 24 ms 6256 KB
n-medium-1 13 ms 2420 KB
n-medium-2 20 ms 6384 KB
n-medium-3 2 ms 384 KB
n-medium-4 3 ms 892 KB
n-medium-5 2 ms 512 KB
n-medium-6 22 ms 6384 KB
n-medium-7 13 ms 2420 KB
n-medium-k-small-1 2 ms 512 KB
n-medium-k-small-2 6 ms 1400 KB
n-small-1 1 ms 256 KB
n-small-2 1 ms 256 KB
n-small-3 1 ms 256 KB
nk-large-1 24 ms 6256 KB
nk-large-2 24 ms 6000 KB
sample_01 1 ms 256 KB
sample_02 1 ms 256 KB