Submission #1324106

#TimeUsernameProblemLanguageResultExecution timeMemory
1324106sh_qaxxorov_571Carnival (CEOI14_carnival)C++20
100 / 100
3 ms428 KiB
#include <iostream> #include <vector> using namespace std; /** * CEOI 2014 - Carnival * So'rovlar soni: O(N * log N) * N = 150 uchun taxminan 150 * 8 = 1200 so'rov, bu 3500 limitidan ancha kam. */ int ask(const vector<int>& v) { if (v.empty()) return 0; cout << v.size(); for (int x : v) cout << " " << x; cout << endl; int res; cin >> res; return res; } int main() { int N; cin >> N; vector<int> costume_id(N + 1); vector<int> unique_reps; // Har bir turning vakillari (do'st raqamlari) costume_id[1] = 1; unique_reps.push_back(1); int current_max_id = 1; for (int i = 2; i <= N; i++) { // Avval i-do'st barcha vakillar bilan birga yangi turmi yoki yo'qligini tekshiramiz vector<int> query = unique_reps; query.push_back(i); if (ask(query) > (int)unique_reps.size()) { // Yangi kostyum turi current_max_id++; costume_id[i] = current_max_id; unique_reps.push_back(i); } else { // Avvalgi kostyumlardan biri bilan bir xil, Binary Search boshlaymiz int low = 0, high = (int)unique_reps.size() - 1; int found_idx = 0; while (low <= high) { int mid = (low + high) / 2; vector<int> sub_query; for (int j = 0; j <= mid; j++) sub_query.push_back(unique_reps[j]); int res1 = (int)sub_query.size(); sub_query.push_back(i); int res2 = ask(sub_query); if (res1 == res2) { found_idx = mid; high = mid - 1; } else { low = mid + 1; } } costume_id[i] = costume_id[unique_reps[found_idx]]; } } // Natijani chiqarish cout << 0; for (int i = 1; i <= N; i++) cout << " " << costume_id[i]; cout << endl; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...