답안 #678421

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
678421 2023-01-05T22:13:27 Z Doncho_Bonboncho Martian DNA (IOI16_dna) C++14
100 / 100
13 ms 400 KB
#include "dna.h"
#include <bits/stdc++.h>

std::string analyse(int n, int t) {
	std::string nas = "";

	if( !make_test( "0" ) ){
		for( int i=0 ; i<n ; i++ ) nas += '1';
		return nas;
	}
	int l = 0, r = n+1;
	while( l != r-1 ){
		int m = ( l + r )/2;
	//	std::cerr<<m<<"\n";
		std::string curr = "";
		for( int i=0 ; i<m ; i++ ) curr += '0';
		if( make_test( curr ) ) l = m;
		else r = m;
	}

	for( int i=0 ; i<l ; i++ ) nas += '0';

	int num = 0;
	while( num <= l ){
		if( make_test( nas + '1' ) ){ nas += '1'; num = 0; }
		else { nas += '0'; num++; }
	}

	r = n+1;
	while( l != r-1 ){
		int m = ( l + r ) >> 1;
		if( make_test( nas.substr( 0, m ) ) ) l = m;
		else r = m;
	}

	nas = nas.substr( 0, l );
	
	for( int i= nas.size() ; i < n ; i++ ){
		if( make_test( '1' + nas ) ) nas = '1' + nas;
		else nas = '0' + nas;
	}

	return nas;
	/*
	std::cerr<<" $$ "<<numT<<"\n";
	//std::cerr<<" ! "<<l<<"\n";

	int maxZ = l +1;

	for( int i=0 ; i<l ; i++ ) nas += '0';

	l = 0, r = n+1;
	while( l != r-1 ){
		int m = ( l + r )/2;
//		std::cerr<<m<<"\n";
		std::string curr = "";
		for( int i=0 ; i<m ; i++ ) curr += '1';
		if( make_test( curr ) ) l = m;
		else r = m;
	}
	std::cerr<<" $$ "<<numT<<"\n";
	//std::cerr<<" ! "<<l<<"\n";


	int maxO = l +1;
	//std::cerr<<" max 0, 1 -> "<<maxZ<<" "<<maxO<<"\n";

	//std::cerr<<" ^ "<<nas<<"\n";

	l = 1, r = n+1;
	char add = '1';
	while( l ){
		l = 0, r = n - nas.size() +1;

		int rr;
		if( add == '1' ) rr = maxO;
		else rr = maxZ;
		
		r = std::min( r, rr );

		while( l != r-1 ){
			int m = ( l + r ) >> 1;
			std::string curr = "";
			for( int i=0 ; i<m ; i++ ) curr += add;
			curr = nas  + curr;
			if( make_test( curr ) ) l = m;
			else r = m;

		}
		for( int i=0 ; i<l ; i++ ) nas += add;
	//	std::cerr<<" ^ "<<nas<<"\n";

		if( add == '1' ) add = '0';
		else add = '1';
	}

	std::cerr<<" $ "<<numT<<"\n";

	l = 1;
	add = '1';
	while( l ){
		l = 0, r = n - nas.size() +1;

		int rr;
		if( add == '1' ) rr = maxO;
		else rr = maxZ;
		
		r = std::min( r, rr );

	//	std::cerr<<" @ "<<l<<" "<<r<<"\n";

		while( l != r-1 ){
			int m = ( l + r ) /2;
	//		std::cerr<<m<<"\n";
			std::string curr = "";
			for( int i=0 ; i<m ; i++ ) curr += add;
			curr = curr + nas;
	//		std::cerr<<" & "<<curr<<"\n";
			if( make_test( curr ) ) l = m;
			else r = m;

		}
	
		for( int i=0 ; i<l ; i++ ) nas = add + nas;
		
		if( add == '1' ) add = '0';
		else add = '1';
	}

	std::cerr<<" $ "<<numT<<"\n";
	*/

    return nas;
}

Compilation message

grader.cpp: In function 'bool make_test(std::string)':
grader.cpp:14:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |  for (int i = 0; i < p.size(); i++) {
      |                  ~~^~~~~~~~~~
grader.cpp:23:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |  for (int i = 1; i <= ss.size(); i++) {
      |                  ~~^~~~~~~~~~~~
grader.cpp:28:13: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   if (pr[i] == p.size()) {
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 300 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 300 KB Output is correct
10 Correct 0 ms 300 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 340 KB Output is correct
15 Correct 1 ms 304 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 300 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 212 KB Output is correct
23 Correct 1 ms 300 KB Output is correct
24 Correct 0 ms 300 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 300 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 296 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 300 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 304 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 1 ms 300 KB Output is correct
23 Correct 1 ms 212 KB Output is correct
24 Correct 1 ms 212 KB Output is correct
25 Correct 0 ms 212 KB Output is correct
26 Correct 1 ms 300 KB Output is correct
27 Correct 1 ms 212 KB Output is correct
28 Correct 1 ms 300 KB Output is correct
29 Correct 1 ms 212 KB Output is correct
30 Correct 1 ms 304 KB Output is correct
31 Correct 1 ms 224 KB Output is correct
32 Correct 1 ms 340 KB Output is correct
33 Correct 1 ms 212 KB Output is correct
34 Correct 1 ms 300 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 300 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 300 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 1 ms 212 KB Output is correct
19 Correct 1 ms 212 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 212 KB Output is correct
22 Correct 8 ms 348 KB Output is correct
23 Correct 9 ms 340 KB Output is correct
24 Correct 8 ms 380 KB Output is correct
25 Correct 12 ms 400 KB Output is correct
26 Correct 10 ms 340 KB Output is correct
27 Correct 6 ms 300 KB Output is correct
28 Correct 6 ms 340 KB Output is correct
29 Correct 13 ms 340 KB Output is correct
30 Correct 0 ms 212 KB Output is correct
31 Correct 6 ms 380 KB Output is correct
32 Correct 12 ms 340 KB Output is correct
33 Correct 8 ms 372 KB Output is correct
34 Correct 8 ms 304 KB Output is correct
35 Correct 7 ms 384 KB Output is correct
36 Correct 7 ms 340 KB Output is correct
37 Correct 7 ms 340 KB Output is correct
38 Correct 9 ms 304 KB Output is correct
39 Correct 9 ms 300 KB Output is correct