제출 #1313545

#제출 시각아이디문제언어결과실행 시간메모리
1313545Jawad_Akbar_JJHidden Sequence (info1cup18_hidden)C++20
100 / 100
2 ms424 KiB
#include <iostream>
#include <vector>
#include "grader.h"

using namespace std;

int pre[1005], suf[1005];

vector<int> get(int c1, int a, int c2 = 0, int b = 0){
	vector<int> vec;
	for (int i=1;i<=c1;i++)
		vec.push_back(a);
	for (int i=1;i<=c2;i++)
		vec.push_back(b);
	return vec;
}

vector<int> findSequence(int n){
	int z = 0, o = 1, Co = 0, Cz = 0, lim = n / 2 + 1;

	if (isSubsequence(get((n + 1) / 2, z)))
		swap(z, o);

	for (int i=(n + 1) / 2;i>=0;i--){
		if (i == 0)
			return get(n, o);
		if (isSubsequence(get(i, z)))
			Cz = i, Co = n - i, i = -1;
	}

	for (int i=Cz, num = 0;i>=1;i--){
		while (i + num + 1 <= lim and isSubsequence(get(i, z, num + 1, o)))
			num++;
		suf[i] = num;
	}

	for (int i=1, num = 0;i<=Cz;i++){
		while (Cz - i + 1 + num + 1 <= lim and isSubsequence(get(num + 1, o, Cz - i + 1, z)))
			num++;
		pre[i] = num;
	}

	vector<int> ans;
	suf[0] = min(lim, Co);
	for (int i=1, cur;i<=Cz;i++){
		if (pre[i] + Cz - i + 1 != lim)
			cur = pre[i] - pre[i-1];
		else if (i - 1 + suf[i-1] != lim)
			cur = suf[i-1] - suf[i];
		else
			cur = n - Cz - suf[i] - pre[i-1];
		while (cur--)
			Co--, ans.push_back(o);
		ans.push_back(z);
	}
	while (Co--)
		ans.push_back(o);

	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
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...