Submission #1341999

#TimeUsernameProblemLanguageResultExecution timeMemory
1341999codexistentMonster-Go (EGOI25_monstergo)C++20
100 / 100
1 ms344 KiB
#include <bits/stdc++.h>

void _main(){
    int n;
    std::cin>>n;

    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            int a,b;

            std::cin>>a>>b;

            std::vector<std::vector<int>>v(3,std::vector<int>());

            for(int k=a+b;k>=1;k--){
                std::cin>>a>>b;
                v[a].push_back(b),v[b].push_back(a);
            }
            for(int k=a-b;k<=1;k++){
                std::cin>>a>>b;
                v[a].push_back(b),v[b].push_back(a);
            }
            for(int k=a+b;k>=1;k--){
                std::cin>>a>>b;
                v[a].push_back(b),v[b].push_back(a);
            }

            std::cout<<v[a].size()<<std::endl;
        }
    }
}


































#include <bits/stdc++.h>

using namespace std;

const int MXN = 5e1 + 5;

int n;
int dp[MXN][MXN];
int nck[MXN][MXN];
array<int, 2> par[MXN][MXN];
vector<array<int, 2>> parts;
vector<vector<int>> ans;

void f(int i, int msk, int tar)
{
  if (__builtin_popcount(msk) > tar) return;
  if (__builtin_popcount(msk) + (int)parts.size() - i < tar) return;
  if (i == parts.size())
  {
    ans.push_back({});
    for (int j = 0; j < parts.size(); j++)
    {
      if (msk >> j & 1){
        for (int x = parts[j][0]; x <= parts[j][1]; x++) ans.back().push_back(x);
      }
    }
    return;
  }
  f(i + 1, msk | (1 << i), tar);
  f(i + 1, msk, tar);
}
main(){
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  for (int i = 0; i < 50; i++) nck[i][0] = 1;
  for (int i = 1; i < 50; i++){
    for (int j = 0; j < 50; j++)
    {
      nck[i][j] = nck[i - 1][j] + (j ? nck[i - 1][j - 1] : 0);
      if (nck[i][j] > 100) nck[i][j] = 100;
    }
  }
  cin >> n;
  dp[0][0] = 1;
  for (int i = 0; i <= 50; i++)
  {
    for (int j = 1; j <= n; j++)
    {
      for (int sz : {1, 2, 3, 4, 6, 12})
      {
        int k = 12 / sz;
        for (int cnt = k; cnt * sz <= i; cnt++)
        {
          if (nck[cnt][k] > j) continue;
          if (dp[i - cnt * sz][j - nck[cnt][k]])
          {
            par[i][j] = {cnt, sz};
            dp[i][j] = 1;
          }
        }
      }
    }
  }
  int x = 0, y = n;
  while (x <= 50 && !dp[x][y]) x++;
  assert(x <= 50);
  while (x && y)
  {
    auto [cnt, sz] = par[x][y];
    int k = 12 / sz;
    int l = x - cnt * sz + 1;
    parts.clear();
    for (int i = 0; i < cnt; i++)
    {
      parts.push_back({l, l + sz - 1});
      l += sz;
    }
    f(0, 0, k);
    x -= cnt * sz, y -= nck[cnt][k];
  }
  for (int i = 0; i < ans.size(); i++)
  {
    for (int &j : ans[i]) cout << j - 1 << ' ';
    cout << '\n';
  }
}

















Compilation message (stderr)

Main.cpp:97:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   97 | main(){
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...