Submission #1131448

#TimeUsernameProblemLanguageResultExecution timeMemory
1131448huutuanCard Collection (JOI24_collection)C++20
11 / 100
178 ms250928 KiB
#include<bits/stdc++.h>

using namespace std;

int n, m;
int a[20], b[20];
int f[20][20][20][20][20][20];

int dp(int l, int r, int la, int ra, int lb, int rb){
   if (f[l][r][la][ra][lb][rb]!=-1) return f[l][r][la][ra][lb][rb];
   if (l==r) return f[l][r][la][ra][lb][rb]=(la<=a[l] && a[l]<=ra && lb<=b[l] && b[l]<=rb);
   int res=0;
   for (int i=l; i<r; ++i){
      if (dp(l, i, la, ra, lb, rb) && dp(i+1, r, la, n-1, lb, n-1)){ res=1; break; }
      if (dp(l, i, la, ra, lb, n-1) && dp(i+1, r, la, n-1, lb, rb)){ res=1; break; }
      if (dp(l, i, la, n-1, lb, rb) && dp(i+1, r, la, ra, lb, n-1)){ res=1; break; }
      if (dp(l, i, la, n-1, lb, n-1) && dp(i+1, r, la, ra, lb, rb)){ res=1; break; }
      if (dp(l, i, la, ra, lb, rb) && dp(i+1, r, 0, ra, 0, rb)){ res=1; break; }
      if (dp(l, i, la, ra, 0, rb) && dp(i+1, r, 0, ra, lb, rb)){ res=1; break; }
      if (dp(l, i, 0, ra, lb, rb) && dp(i+1, r, la, ra, 0, rb)){ res=1; break; }
      if (dp(l, i, 0, ra, 0, rb) && dp(i+1, r, la, ra, lb, rb)){ res=1; break; }
   }
   return f[l][r][la][ra][lb][rb]=res;
}

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> n >> m;
   vector<int> va, vb;
   for (int i=0; i<n; ++i) cin >> a[i] >> b[i], va.push_back(a[i]), vb.push_back(b[i]);
   sort(va.begin(), va.end()); sort(vb.begin(), vb.end());
   va.resize(unique(va.begin(), va.end())-va.begin()); vb.resize(unique(vb.begin(), vb.end())-vb.begin());
   for (int i=0; i<n; ++i) a[i]=lower_bound(va.begin(), va.end(), a[i])-va.begin(), b[i]=lower_bound(vb.begin(), vb.end(), b[i])-vb.begin();
   memset(f, -1, sizeof f);
   for (int i=1; i<=m; ++i){
      int x, y; cin >> x >> y;
      if (binary_search(va.begin(), va.end(), x) && binary_search(vb.begin(), vb.end(), y)){
         x=lower_bound(va.begin(), va.end(), x)-va.begin();
         y=lower_bound(vb.begin(), vb.end(), y)-vb.begin();
         if (dp(0, n-1, x, x, y, y)) cout << i << ' ';
      }
   }
   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...