문제

링크

풀이

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
 
inline int calc(int n, const vector<bool> &a) {
  vector<int> b, cnt(n+1, 0);
  for (int i=1; i<=n; i++) if (a[i]) b.push_back(i);
  int m = b.size();
  for (int i=0; i<m-2; i++) for (int j=i+1; j<m-1; j++) for (int k=j+1; k<m; k++) {
    if (b[i] ^ b[j] ^ b[k]) continue;
    cnt[b[i]]++; cnt[b[j]]++; cnt[b[k]]++;
  }
  int mx = 0, idx = 0;
  for (int i=1; i<=n; i++) {
    if (cnt[i] > mx) {
      mx = cnt[i];
      idx = i;
    }
  }
  return idx;
}
 
void solve(void) {
  int n; cin >> n;
 
  vector<bool> a(n+1, true);
  while (a[0]) a[calc(n, a)] = false;
 
  cout << count(a.begin(), a.end(), true) << "\n";
  for (int i=1; i<=n; i++) if (a[i]) cout << i << " ";
  cout << "\n";
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  int t; cin >> t;
  while (t--) solve();
  return 0;
}