제출 #116088

#제출 시각아이디문제언어결과실행 시간메모리
116088tjd229Martian DNA (IOI16_dna)C++14
100 / 100
15 ms404 KiB
#include "dna.h"

#include <cstdlib>
#define reg register
std::string make_str(int len, char c) {
	std::string s = "";
	for (reg int i = 0; i < len; ++i) s += c;
	return s;
}
std::string analyse(int n, int t) {
	int cnt = 0;
	int l = 1, r = n;
	while (l <= r) {
		int m = (l + r) >> 1;
		if(make_test(make_str(m,'0'))) cnt=m,l=m+1;
		else r=m-1;
	}
	if (!cnt) return make_str(n,'1');
	std::string s = make_str(cnt, '0');
	int stk = cnt;
	while (s.size()<n && stk<=cnt) {//len<n && stk
		if (make_test(s + '1')) s += '1',stk=0;
		else s += '0',++stk;
	}
	if (s.size() == n && make_test(s)) return s;
	int bnd = s.size() - stk;
	std::string sub = "";
	for (reg int i = 0; i < bnd; ++i) sub += s[i];
	l = 0, r = stk - 1; cnt = 0;
	while (l <= r) {
		int m = (l + r) >> 1;
		if (make_test(sub + make_str(m, '0'))) cnt=m,l = m + 1;
		else r = m - 1;
	}
	s = sub + make_str(cnt,'0');
	while (s.size() < n) {
		s = '1' + s;
		if (!make_test(s)) s[0] = '0';
	}
	return s;
}                       

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

dna.cpp: In function 'std::__cxx11::string analyse(int, int)':
dna.cpp:21:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (s.size()<n && stk<=cnt) {//len<n && stk
         ~~~~~~~~^~
dna.cpp:25:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if (s.size() == n && make_test(s)) return s;
      ~~~~~~~~~^~~~
dna.cpp:36:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (s.size() < n) {
         ~~~~~~~~~^~~
grader.cpp: In function 'bool make_test(std::__cxx11::string)':
grader.cpp:14:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < p.size(); i++) {
                  ~~^~~~~~~~~~
grader.cpp:23:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i <= ss.size(); i++) {
                  ~~^~~~~~~~~~~~
grader.cpp:28:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if (pr[i] == p.size()) {
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...