(200629) 코드포스

Codeforces materials usage license (v. 0.1) 에 따라 codeforces.com 의 문제임을 알립니다.

Original problem link: Problem - 1365E - Codeforces

Example

Input

3
2 1 3

Output

3

Input

3
3 1 4

Output

7

Input

1
1

Output

1

Input

4
7 7 1 1

Output

7


Common codes for Codeforces
#include <algorithm>
#include <array>
#include <cmath>
#include <functional> 
#include <iostream>
#include <queue>
#include <string>
#include <vector>

namespace predefined {

#ifdef CODEFORCES_DEBUG
  constexpr bool kIsDebug = true;
#else
  constexpr bool kIsDebug = false;
#endif

enum class LogType {
  INFO,
  DEBUG
};

template <LogType type, bool... Bools>
struct Log;

template <>
struct Log<LogType::INFO> {
  Log() {}
  ~Log() { std::cout << '\n'; }

  template <typename T>
  Log& operator<< (const T &t) {
    std::cout << t;
    return *this;
  }
};

template <>
struct Log<LogType::DEBUG, true>{
  Log() {}
  ~Log() { std::cout << '\n'; }

  void Open() {
    freopen("input.txt", "r", stdin);
  }

  template <typename T>
  Log& operator<< (const T &t) {
    std::cout << t;
    return *this;
  }
};

template <>
struct Log<LogType::DEBUG, false> {
  Log() {}
  ~Log() {}

  void Open() {}

  template <typename T>
  Log& operator<< (const T &t) { return *this; }
};

template<typename T>
struct BoolMap {
  explicit BoolMap(const T &_true_value, const T &_false_value) 
    : true_value(_true_value),
      false_value(_false_value) {}

  const T true_value;
  const T false_value;

  const T inline GetValue(const bool bool_key) const {
    return bool_key ? true_value : false_value;  
  };
};

}  // predefined;

#define LOG_INFO predefined::Log<predefined::LogType::INFO>()
#define LOG_DEBUG predefined::Log<predefined::LogType::DEBUG, predefined::kIsDebug>()
#define LOG(LEVEL) LOG_##LEVEL
#define LABEL(variable_name) #variable_name << ": " << variable_name

#define INIT_ANSWER(type, true_value, false_value) \
  const predefined::BoolMap<type> predefined_bool_map(true_value, false_value)
#define INIT_STRING_ANSWER(true_string, false_string) \
  INIT_ANSWER(std::string, true_string, false_string)
#define GET_ANSWER(bool_key) \
  predefined_bool_map.GetValue(bool_key)

#define INIT_CODEFORCES() \
  std::ios::sync_with_stdio(false); \
  std::cin.tie(NULL); \
  LOG(DEBUG).Open(); \

문제를 이해하기 빡새네요. ㄷㄷ
온갖 삽질하다가 감으로 풀었습니다.

1365E

3개 이하랑 4개 이상이랑 나눠서 풀다가
4개 째부터 손해보는 경우 밖에 없는거 같아서 N^3 완탐 돌렸더니 정답이네요.

좀 더 생각해보니까 4번째가 들어가면서
3개에서 1개로도 충분했던게 4개째 투입 되는 것이 1로 풀로 채워진 것 아니면 무조건 손해네요.
어차피 이미 2개 카운트 했던 것은 이전에도 이미 체크 되어있고, 1개 카운트 였던 것은 4번째 녀석이 1이 아닌 이상 손해니까요.
4개 이상 선택시 이득인 경우 없음을 논리적 단계로 밟아 나가는 문제였네요.

namespace {
using namespace std;
}  // unnamed namespace;

int main(int argc, char** argv) {
  INIT_CODEFORCES();

  size_t n;
  cin >> n;

  int64_t ans = 0;

  vector<int64_t> numbers(n);
  for (size_t i = 0; i < n; ++i) {
    cin >> numbers[i];
  }

  for (size_t i = 0; i < n; ++i) {
    for (size_t j = 0; j < n; ++j) {
      for (size_t k = 0; k < n; ++k) {
        ans = max(ans, numbers[i] | numbers[j] | numbers[k]);
      }
    }
  }

  LOG(INFO) << ans;

  return 0;
}

예네 문제만 그런건가요. 아님 보통 다 이런식 인가요 지문이? 꼭 대학교 수학교재 보는것 같에요.

지문은 좀 딱딱한게 있긴한데 나름 유머가 있을때도 있습니다. :slight_smile:
문제 자체는 예내가 깔끔하게 떨어지는 편입니다.ㅋㅋ

1 Like