답안 #553705

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
553705 2022-04-26T16:22:29 Z amunduzbaev Super Dango Maker (JOI22_dango3) C++17
22 / 100
534 ms 612 KB
#include "dango3.h"
#ifndef EVAL
#include "grader.cpp"
#endif
#include "bits/stdc++.h"
using namespace std;

void Solve(int n, int m) {
	vector<int> a(n * m);
	iota(a.begin(), a.end(), 0);
	for(int i=m;i>0;i--){
		int j=n*i-1;
		vector<int> tmp;
		
		auto ask = [&](int j){
			vector<int> tt;
			for(int i=0;i<=j;i++) tt.push_back(a[i] + 1);
			for(auto x : tmp) tt.push_back(a[x] + 1);
			
			return Query(tt);
		};
		while(~j){
			if(ask(j)){
				if(!j) { 
					tmp.push_back(j);
					break;
				}
				j = max(j - i, 0);
			} else {
				int l = j, r = min(j + i, tmp.empty() ? n * m : tmp.back() - 1);
				while(l < r){
					int m = (l + r) >> 1;
					if(ask(m)) r = m;
					else l = m + 1;
				}
				assert(l == r);
				tmp.push_back(l);
				j = l - 1;
			}
		}
		
		auto give = [&](vector<int>& tt){
			reverse(tt.begin(), tt.end());
			/* for(auto x : tt) cout<<x<<" ";
			cout<<"\n";
			for(auto x : a) cout<<x<<" ";
			cout<<"\n"; */
			vector<int> tmp, qq;
			for(int j=0, l=0;j<n*i;j++){
				if(l<n && tt[l] == j) {
					qq.push_back(a[j] + 1);
					l++; 
					continue;
				}
				
				tmp.push_back(a[j]);
			}
			swap(tmp, a);
			Answer(qq);
			assert(qq.size() == n);
		};
		
		assert(tmp.size() == n);
		give(tmp);
	}
}

/*

3 2
3 3 1 2 1 2

*/

Compilation message

In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from dango3.cpp:5:
dango3.cpp: In lambda function:
dango3.cpp:60:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   60 |    assert(qq.size() == n);
      |           ~~~~~~~~~~^~~~
dango3.cpp: In function 'void Solve(int, int)':
dango3.cpp:63:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   63 |   assert(tmp.size() == n);
      |          ~~~~~~~~~~~^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 340 KB Output is correct
2 Correct 11 ms 372 KB Output is correct
3 Correct 17 ms 376 KB Output is correct
4 Correct 19 ms 340 KB Output is correct
5 Correct 9 ms 376 KB Output is correct
6 Correct 9 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 160 ms 500 KB Output is correct
2 Correct 158 ms 480 KB Output is correct
3 Correct 404 ms 468 KB Output is correct
4 Correct 403 ms 592 KB Output is correct
5 Correct 115 ms 480 KB Output is correct
6 Correct 114 ms 484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 534 ms 612 KB Wrong Answer [3]
2 Halted 0 ms 0 KB -