# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
580849 | 2022-06-22T02:07:04 Z | JustInCase | Super Dango Maker (JOI22_dango3) | C++17 | 0 ms | 0 KB |
#include "dango3.h" #include <random> #include <vector> #define solve Solve #define submitAnswer Answer #define query Query std::mt19937 mt(69); void solve(int32_t n, int32_t m) { std::vector< int32_t > remDangos(n * m); std::vector< bool > used(n * m + 1, false); for(int32_t i = 1; i <= n * m; i++) { remDangos[i - 1] = i; } shuffle(std::begin(remDangos), std::end(remDangos), mt); for(int32_t r = 0; r < m; r++) { std::vector< int32_t > currentDangos; for(auto &x : remDangos) { std::vector< int32_t > queryDangos; for(int32_t i = 1; i <= n * m; i++) { if(!used[i] && i != x) { queryDangos.push_back(i); } } if(query(queryDangos) == m - r - 1) { currentDangos.push_back(x); used[x] = true; if(currentDangos.size() == n) { break; } } } submitAnswer(currentDangos); std::vector< int32_t > newRem; for(int32_t i = 1; i <= n * m; i++) { if(!used[i]) { newRem.push_back(i); } } remDangos = newRem; } }