제출 #1358044

#제출 시각아이디문제언어결과실행 시간메모리
1358044altern23Hidden Sequence (info1cup18_hidden)C++20
15 / 100
1038 ms424 KiB
#include<bits/stdc++.h>
#include "grader.h"

using namespace std;

#pragma GCC optimize ("Ofast", "unroll-loops")

#define ll long long

vector <int> findSequence (int N) {
	vector <pair<int, int>> res;
	res.push_back({-1, 0});
	
	int elem;
	
	for (int i = 0; i < 2; i++) {
		vector <int> v;
		for (int j = 1; j <= N/2+1; j++) {
			v.push_back(i);
			if (!isSubsequence(v)) {
				v.pop_back();
				break;
			}
		}
		
		if (v.size() != N/2+1) {
			elem = i;
			for (auto j : v) res.push_back({j, 0});
			break;
		}
	}
	
	ll sum = N-((ll)res.size()-1), cur = res.size();
	
	vector <int> ans;
	
	while (true) {
		if (cur == 1) {
			for (int j = 0; j < res.size(); j++) {
				if (res[j].second == 0) {
					vector <pair<int, int>> nxt;
					for (int k = 0; k < j; k++) nxt.push_back(res[k]);
					nxt.push_back({res[j].first, 1});
					for (int k = 1; k <= sum; k++) nxt.push_back({!elem, -1});
					for (int k = j+1; k < (ll)res.size(); k++) nxt.push_back(res[k]);
					res.swap(nxt);
					break;
				}
			}
			break;
		}
			
		ll MN = sum/cur;
				
		// try every index
				
		for (int j = 0; j < res.size(); j++) {
			if (res[j].second == 0) {
				// try if smuanya MN+1
				vector <int> tmp;
				for (int l = 0; l <= j; l++) {
					if (res[l].first == 0) tmp.push_back(res[l].first);
				}
				for (int l = 1; l <= MN+1; l++) tmp.push_back(!elem);
				for (int l = j+1; l < (ll)res.size(); l++) {
					if (res[l].first == 0) tmp.push_back(res[l].first);
				}
				
				if (!isSubsequence(tmp)) {
					int sz = 0;
					for (int k = 0; k < MN+1; k++) {
						vector <int> tmp;
						for (int l = 0; l <= j; l++) {
							if (res[l].first == 0) tmp.push_back(res[l].first);
						}
						for (int l = 1; l <= k; l++) tmp.push_back(!elem);
						for (int l = j+1; l < (ll)res.size(); l++) {
							if (res[l].first == 0) tmp.push_back(res[l].first);
						}
						if (isSubsequence(tmp)) sz = k;
						else break;
					}
					vector <pair<int, int>> nxt;
					for (int k = 0; k < j; k++) nxt.push_back(res[k]);
					nxt.push_back({res[j].first, 1});
					for (int k = 1; k <= sz; k++) nxt.push_back({!elem, -1});
					for (int k = j+1; k < (ll)res.size(); k++) nxt.push_back(res[k]);
					sum -= sz;
					cur--;
					res.swap(nxt);
					break;
				}
			}
		}
	}
	
	for (auto i : res) {
		if (i.first != -1) ans.push_back(i.first);
	}
	
	return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

grader.cpp: In function 'int main()':
grader.cpp:28:26: warning: format '%d' expects argument of type 'int', but argument 3 has type 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wformat=]
   28 |     fprintf (fifo_out, "%d\n", ans.size ());
      |                         ~^     ~~~~~~~~~~~
      |                          |              |
      |                          int            std::vector<int>::size_type {aka long unsigned int}
      |                         %ld
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…