QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#225616#5176. 多控制反转hos_lyric#0 17ms8976kbC++143.7kb2023-10-24 21:05:342024-07-04 02:21:29

Judging History

你现在查看的是最新测评结果

  • [2024-07-04 02:21:29]
  • 评测
  • 测评结果:0
  • 用时:17ms
  • 内存:8976kb
  • [2023-10-24 21:05:34]
  • 提交

answer

#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

using Int = long long;

template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")


struct Op {
  int t, x, y, z;
  friend ostream &operator<<(ostream &os, const Op &op) {
    return os << "(" << op.t << "; " << op.x << "," << op.y << "," << op.z << ")";
  }
};

int N, M, Q, C;

vector<Op> ops;
void oper(int x) {
  assert(0 <= x); assert(x < M);
  ops.push_back(Op{1, x, -1, -1});
}
void oper(int x, int y) {
  assert(0 <= x); assert(x < M);
  assert(0 <= y); assert(y < M);
  assert(x != y);
  ops.push_back(Op{2, x, y, -1});
}
void oper(int x, int y, int z) {
  assert(0 <= x); assert(x < M);
  assert(0 <= y); assert(y < M);
  assert(0 <= z); assert(z < M);
  assert(x != y); assert(x != z); assert(y != z);
  ops.push_back(Op{3, x, y, z});
}

void judge() {
  for (int p = 0; p < 1 << M; ++p) {
    int q = p, r = p;
    if (!(~q & ((1 << N) - 1))) q ^= 1 << N;
    for (const auto &op : ops) {
      switch (op.t) {
        case 1: r ^= 1 << op.x; break;
        case 2: if (r >> op.x & 1) r ^= 1 << op.y; break;
        case 3: if ((r >> op.x & 1) && (r >> op.y & 1)) r ^= 1 << op.z; break;
        default: assert(false);
      }
    }
    if (q != r) {
      cerr << "FAIL" << endl;
      r = p;
      for (const auto &op : ops) {
        for (int i = 0; i < M; ++i) cerr << (r >> i & 1);
        cerr << " " << op << endl;
        switch (op.t) {
          case 1: r ^= 1 << op.x; break;
          case 2: if (r >> op.x & 1) r ^= 1 << op.y; break;
          case 3: if ((r >> op.x & 1) && (r >> op.y & 1)) r ^= 1 << op.z; break;
          default: assert(false);
        }
      }
      for (int i = 0; i < M; ++i) cerr << (r >> i & 1);
      cerr << endl;
    }
    assert(q == r);
  }
}

void solve(int l, int r, int tar) {
  if (r - l == 0) {
    oper(tar);
  } else if (r - l == 1) {
    oper(l, tar);
  } else if (r - l == 2) {
    oper(l, l + 1, tar);
  } else {
    const int tmp = N ^ (N + 1) ^ tar;
    oper(r - 1, tmp, tar); solve(l, r - 1, tmp);
    oper(r - 1, tmp, tar); solve(l, r - 1, tmp);
  }
}

int main() {
  for (; ~scanf("%d%d%d%d", &N, &M, &Q, &C); ) {
    ops.clear();
    solve(0, N, N);
    
    printf("%d\n", (int)ops.size());
    for (const auto &op : ops) {
      switch (op.t) {
        case 1: printf("1 %d\n", op.x); break;
        case 2: printf("2 %d %d\n", op.x, op.y); break;
        case 3: printf("3 %d %d %d\n", op.x, op.y, op.z); break;
        default: assert(false);
      }
    }
    
#ifdef LOCAL
    judge();
#endif
  }
  return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 15
Accepted
time: 1ms
memory: 3808kb

input:

0 2 1 1

output:

1
1 0

result:

ok OK.

Test #2:

score: 0
Wrong Answer
time: 1ms
memory: 3904kb

input:

13 28 105 1

output:

6142
3 12 14 13
3 11 13 14
3 10 14 13
3 9 13 14
3 8 14 13
3 7 13 14
3 6 14 13
3 5 13 14
3 4 14 13
3 3 13 14
3 2 14 13
3 0 1 14
3 2 14 13
3 0 1 14
3 3 13 14
3 2 14 13
3 0 1 14
3 2 14 13
3 0 1 14
3 4 14 13
3 3 13 14
3 2 14 13
3 0 1 14
3 2 14 13
3 0 1 14
3 3 13 14
3 2 14 13
3 0 1 14
3 2 14 13
3 0 1 14
...

result:

wrong answer Integer 6142 violates the range [0, 105]

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Wrong Answer

Test #13:

score: 10
Accepted
time: 1ms
memory: 3736kb

input:

0 2 1 4

output:

1
1 0

result:

ok OK.

Test #14:

score: 0
Wrong Answer
time: 17ms
memory: 8976kb

input:

18 20 325 4

output:

196606
3 17 19 18
3 16 18 19
3 15 19 18
3 14 18 19
3 13 19 18
3 12 18 19
3 11 19 18
3 10 18 19
3 9 19 18
3 8 18 19
3 7 19 18
3 6 18 19
3 5 19 18
3 4 18 19
3 3 19 18
3 2 18 19
3 0 1 18
3 2 18 19
3 0 1 18
3 3 19 18
3 2 18 19
3 0 1 18
3 2 18 19
3 0 1 18
3 4 18 19
3 3 19 18
3 2 18 19
3 0 1 18
3 2 18 19
...

result:

wrong answer Integer 196606 violates the range [0, 325]

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Wrong Answer

Test #20:

score: 0
Wrong Answer
time: 2ms
memory: 4044kb

input:

14 16 393 6

output:

12286
3 13 15 14
3 12 14 15
3 11 15 14
3 10 14 15
3 9 15 14
3 8 14 15
3 7 15 14
3 6 14 15
3 5 15 14
3 4 14 15
3 3 15 14
3 2 14 15
3 0 1 14
3 2 14 15
3 0 1 14
3 3 15 14
3 2 14 15
3 0 1 14
3 2 14 15
3 0 1 14
3 4 14 15
3 3 15 14
3 2 14 15
3 0 1 14
3 2 14 15
3 0 1 14
3 3 15 14
3 2 14 15
3 0 1 14
3 2 14 ...

result:

wrong answer Integer 12286 violates the range [0, 393]

Subtask #7:

score: 0
Skipped

Dependency #2:

0%

Subtask #8:

score: 0
Skipped

Dependency #3:

0%