CSES - APIO 2007 - Results
Submission details
Task:Zoo
Sender:ollpu
Submission time:2019-03-07 16:33:53 +0200
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttime
#1ACCEPTED0.01 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.13 sdetails
#5ACCEPTED0.02 sdetails
#6ACCEPTED0.02 sdetails
#7ACCEPTED0.02 sdetails
#8ACCEPTED0.03 sdetails
#9ACCEPTED0.05 sdetails
#10ACCEPTED0.05 sdetails
#11ACCEPTED0.09 sdetails
#12ACCEPTED0.08 sdetails
#13ACCEPTED0.72 sdetails
#14ACCEPTED0.73 sdetails
#15ACCEPTED0.58 sdetails
#16ACCEPTED1.02 sdetails
#17ACCEPTED1.02 sdetails
#18ACCEPTED1.02 sdetails
#19ACCEPTED1.02 sdetails
#20ACCEPTED0.03 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:63:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int coi = 0; coi < co[ci].size(); ++coi) {
                               ~~~~^~~~~~~~~~~~~~~

Code

#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
int dp[10000][1<<4];
int z[50000];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, c;
  cin >> n >> c;
  vector<bool> co[c];
  vector<int> cow[c];
  vector<int> ctm[n][2];
  for (int i = 0; i < c; ++i) {
    int e, f, l;
    cin >> e >> f >> l;
    e--;
    for (int j = 0; j < f; ++j) {
      int x;
      cin >> x;
      x--;
      co[i].push_back(0);
      cow[i].push_back(x);
      ctm[x][0].push_back(i);
    }
    for (int j = 0; j < l; ++j) {
      int x;
      cin >> x;
      x--;
      co[i].push_back(1);
      cow[i].push_back(x);
      ctm[x][1].push_back(i);
    }
  }
  int res = 0;
  for (int sp = 0; sp < 1<<4; ++sp) {
    for (int i = 3; i < n; ++i) {
      for (int lp = 0; lp < 1<<4; ++lp) {
        dp[i][lp] = 0;
      }
    }
    for (int i = 0; i < c; ++i) z[i] = 0;
    int icc = 0;
    for (int j = 0; j < 4; ++j) {
      for (int ci : ctm[j][(sp >> j)&1]) {
        if (!z[ci]) {
          icc++;
          z[ci] = 1;
        }
      }
    }
    dp[3][sp] = icc;
    res = max(res, icc);
    for (int i = 4; i < n; ++i) {
      for (int lp = 0; lp < 1<<4; ++lp) {
        for (int pbit = 0; pbit <= 1; ++pbit) {
          int pp = ((lp << 1)&15) | pbit;
          int gc = 0;
          for (int ci : ctm[i][lp>>3]) {
            if (z[ci]) continue;
            bool f = 1;
            for (int coi = 0; coi < co[ci].size(); ++coi) {
              int idx = cow[ci][coi]-(i-4);
              int bv = co[ci][coi];
              if (idx >= 0 && idx < 4 && ((pp>>idx)&1) == bv) {
                f=0; break;
              }
            }
            gc += f;
          }
          dp[i][lp] = max(dp[i][lp], dp[i-1][pp]+gc);
          res = max(res, dp[i][lp]);
        }
      }
    }
  }
  cout << res << endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
10 10
1 1 1 3 2
2 1 0 4
3 1 1 5 6
4 1 1 7 6
...

correct output
10

user output
10

Test 2

Verdict: ACCEPTED

input
10 12
2 0 1 2
4 2 2 5 7 4 6
4 0 1 6
4 2 2 5 8 6 7
...

correct output
12

user output
12

Test 3

Verdict: ACCEPTED

input
100 1000
1 0 1 2
1 0 1 3
1 1 0 5
1 1 0 1
...

correct output
628

user output
628

Test 4

Verdict: ACCEPTED

input
9999 49999
1 1 0 2
1 0 1 4
1 1 0 2
1 0 1 2
...

correct output
33706

user output
33706

Test 5

Verdict: ACCEPTED

input
10 60
1 3 0 2 3 4
1 0 1 2
1 1 3 1 2 4 5
1 0 3 3 4 5
...

correct output
58

user output
58

Test 6

Verdict: ACCEPTED

input
10 200
1 2 1 3 4 1
1 3 0 1 2 3
1 1 3 2 1 3 4
1 1 2 3 1 5
...

correct output
181

user output
181

Test 7

Verdict: ACCEPTED

input
80 300
1 0 2 4 5
1 2 0 1 2
2 4 1 2 4 5 6 3
3 4 1 3 4 5 6 7
...

correct output
294

user output
294

Test 8

Verdict: ACCEPTED

input
80 300
1 1 4 2 1 3 4 5
1 2 2 3 5 2 4
2 1 3 4 3 5 6
2 0 3 3 4 6
...

correct output
293

user output
293

Test 9

Verdict: ACCEPTED

input
125 1000
1 1 2 5 1 4
1 2 2 1 5 2 3
1 2 3 2 5 1 3 4
2 3 0 2 3 6
...

correct output
954

user output
954

Test 10

Verdict: ACCEPTED

input
125 1000
1 3 1 1 4 5 2
1 2 2 2 4 3 5
1 1 2 5 2 4
1 0 2 1 3
...

correct output
973

user output
973

Test 11

Verdict: ACCEPTED

input
931 2500
1 2 1 4 5 1
1 1 1 3 1
1 2 1 2 5 1
2 1 2 4 2 6
...

correct output
2489

user output
2489

Test 12

Verdict: ACCEPTED

input
931 2500
1 3 0 1 3 5
1 1 2 5 3 4
1 3 1 1 3 4 2
2 1 2 2 5 6
...

correct output
2495

user output
2495

Test 13

Verdict: ACCEPTED

input
1200 45731
1 4 1 1 3 4 5 2
1 1 1 4 5
1 0 3 2 4 5
1 0 4 1 2 4 5
...

correct output
41896

user output
41896

Test 14

Verdict: ACCEPTED

input
1200 45731
1 4 0 1 2 4 5
1 3 2 1 3 4 2 5
1 3 1 1 2 4 3
1 3 2 1 2 4 3 5
...

correct output
42038

user output
42038

Test 15

Verdict: ACCEPTED

input
9990 25000
1 1 4 4 1 2 3 5
1 3 2 2 3 4 1 5
1 2 2 3 4 1 2
1 0 3 1 2 4
...

correct output
24909

user output
24909

Test 16

Verdict: ACCEPTED

input
9990 49990
1 2 2 2 5 1 4
1 3 1 1 3 5 2
1 2 2 2 5 1 3
1 1 2 5 3 4
...

correct output
48994

user output
48994

Test 17

Verdict: ACCEPTED

input
9990 49990
1 2 1 1 3 2
1 1 1 3 5
1 1 2 4 1 2
1 1 2 2 1 3
...

correct output
49074

user output
49074

Test 18

Verdict: ACCEPTED

input
10000 50000
1 2 2 3 4 2 5
1 1 4 2 1 3 4 5
2 1 3 4 2 3 5
2 1 1 2 5
...

correct output
48996

user output
48996

Test 19

Verdict: ACCEPTED

input
10000 50000
1 3 0 1 2 3
1 3 1 2 3 4 5
1 1 3 1 2 4 5
2 2 3 4 5 2 3 6
...

correct output
49117

user output
49117

Test 20

Verdict: ACCEPTED

input
200 900
1 2 2 4 5 2 3
1 2 0 2 5
1 3 1 3 4 5 1
1 1 2 5 1 2
...

correct output
884

user output
884