제출 #119176

#제출 시각아이디문제언어결과실행 시간메모리
119176TuGSGeReLPaint By Numbers (IOI16_paint)C++14
컴파일 에러
0 ms0 KiB
#include "paint.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
 
using namespace std;
using namespace __gnu_pbds;
 
#define ll long long
#define mp make_pair
#define pub push_back
#define pob pop_back()
#define ss second
#define ff first
#define mt make_tuple
#define pof pop_front()
#define fbo find_by_order
#define ook order_of_key
#define lb lower_bound
#define ub upper_bound
 
typedef tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> indexed_set;
using pll = pair <ll, ll>;
using pii = pair <int, int>;
 
int dp[100005][101], wh[100001], rdp[100005][101], canw[100005], canb[100005];
string ans;
 
string solve_puzzle(string s, vector<int> c) {
	c.insert(c.begin(), 0);
	for (int i = 1; i < s.size(); i++) {
		wh[i] = wh[i - 1];
		
		if ( s[i] == '_' )
			wh[i]++;
	}
	
	s = '0' + s + '0';
	
	for (int i = 0; i < s.size(); i++) {
		if ( s[i] == 'X' )
			break;
		
		dp[i][0] = 1;
	}
	
	for (int j = 1; j < s.size() - 1; j++) {
		for (int i = 1; i < c.size(); i++) {
			if ( s[j] == '_' )
				dp[j][i] = dp[j - 1][i];
			
			else if ( s[j] == 'X' ) {
				if ( j >= c[i] && s[j - c[i]] != 'X' && dp[max(j - c[i] - 1, 0)][i - 1] )
					dp[j][i] = 1;
				
			} else {
				if ( dp[j - 1][i] || (j >= c[i] && s[j - c[i]] != 'X' && dp[max(j - c[i] - 1, 0)][i - 1]) )
					dp[j][i] = 1;
			}
		}
	}
	
	for (int i = s.size(); i >= 0; i--) {
		
		if ( s[i] == 'X' )
			break;
		
		rdp[i][0] = 1;
	}
	
	for (int j = s.size() - 2; j > 0; j--) {
		for (int i = 1; i < c.size(); i++) {
			if ( s[j] == '_' )
				rdp[j][i] = rdp[j + 1][i];
			
			else if ( s[j] == 'X' ) {
				if ( s.size() - j - 1 >= c[c.size() - i] )
					if ( s[min(j + c[c.size() - i], (int)s.size() - 1)] != 'X' && rdp[min(j + c[c.size() - i] + 1, (int)s.size() - 1)][i - 1] )
						rdp[j][i] = 1;
				
			} else {
				if ( rdp[j + 1][i] || (s.size() - j - 1 >= c[c.size() - i] && s[min(j + c[c.size() - i], (int)s.size() - 1)] != 'X' && rdp[min(j + c[c.size() - i] + 1, (int)s.size() - 1)][i - 1]) )
					rdp[j][i] = 1;
			}
		}
	}	
	
	for (int i = 1; i < s.size(); i++)
		for (int j = 0; j < c.size(); j++)
			if ( s[i] != 'X' && dp[i - 1][j] && rdp[i + 1][c.size() - j - 1] )
				canw[i] = 1;
	
	for (int i = 1; i < s.size(); i++)
		for (int j = 1; j < c.size(); j++)
			if ( i >= c[j] && wh[i] - wh[i - c[j]] == 0 && s[i - c[j]] != 'X' && dp[max(i - c[j] - 1, 0)][j - 1] && s[i + 1] != 'X' && rdp[min(i + 2, s.size() - 1)][c.size() - j - 1] )
				canb[i]++, canb[max(i - c[j], 0)]--;
	
	
	for (int i = s.size() - 1; i > 0; i--)
		canb[i] += canb[i + 1];
	
	for (int i = 1; i < s.size() - 1; i++) {
		if ( canw[i] && canb[i] )
			ans += '?';
		else if ( canw[i] )
			ans += '_';
		else
			ans += 'X';
	}
	
	return ans;
}

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

paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:30:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < s.size(); i++) {
                  ~~^~~~~~~~~~
paint.cpp:39:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < s.size(); i++) {
                  ~~^~~~~~~~~~
paint.cpp:46:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int j = 1; j < s.size() - 1; j++) {
                  ~~^~~~~~~~~~~~~~
paint.cpp:47:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 1; i < c.size(); i++) {
                   ~~^~~~~~~~~~
paint.cpp:71:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 1; i < c.size(); i++) {
                   ~~^~~~~~~~~~
paint.cpp:76:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if ( s.size() - j - 1 >= c[c.size() - i] )
paint.cpp:81:45: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if ( rdp[j + 1][i] || (s.size() - j - 1 >= c[c.size() - i] && s[min(j + c[c.size() - i], (int)s.size() - 1)] != 'X' && rdp[min(j + c[c.size() - i] + 1, (int)s.size() - 1)][i - 1]) )
paint.cpp:87:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < s.size(); i++)
                  ~~^~~~~~~~~~
paint.cpp:88:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 0; j < c.size(); j++)
                   ~~^~~~~~~~~~
paint.cpp:92:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < s.size(); i++)
                  ~~^~~~~~~~~~
paint.cpp:93:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int j = 1; j < c.size(); j++)
                   ~~^~~~~~~~~~
paint.cpp:94:154: error: no matching function for call to 'min(int, std::__cxx11::basic_string<char>::size_type)'
    if ( i >= c[j] && wh[i] - wh[i - c[j]] == 0 && s[i - c[j]] != 'X' && dp[max(i - c[j] - 1, 0)][j - 1] && s[i + 1] != 'X' && rdp[min(i + 2, s.size() - 1)][c.size() - j - 1] )
                                                                                                                                                          ^
In file included from /usr/include/c++/7/bits/char_traits.h:39:0,
                 from /usr/include/c++/7/string:40,
                 from paint.h:3,
                 from paint.cpp:1:
/usr/include/c++/7/bits/stl_algobase.h:195:5: note: candidate: template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)
     min(const _Tp& __a, const _Tp& __b)
     ^~~
/usr/include/c++/7/bits/stl_algobase.h:195:5: note:   template argument deduction/substitution failed:
paint.cpp:94:154: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'std::__cxx11::basic_string<char>::size_type {aka long unsigned int}')
    if ( i >= c[j] && wh[i] - wh[i - c[j]] == 0 && s[i - c[j]] != 'X' && dp[max(i - c[j] - 1, 0)][j - 1] && s[i + 1] != 'X' && rdp[min(i + 2, s.size() - 1)][c.size() - j - 1] )
                                                                                                                                                          ^
In file included from /usr/include/c++/7/bits/char_traits.h:39:0,
                 from /usr/include/c++/7/string:40,
                 from paint.h:3,
                 from paint.cpp:1:
/usr/include/c++/7/bits/stl_algobase.h:243:5: note: candidate: template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)
     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
     ^~~
/usr/include/c++/7/bits/stl_algobase.h:243:5: note:   template argument deduction/substitution failed:
paint.cpp:94:154: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'std::__cxx11::basic_string<char>::size_type {aka long unsigned int}')
    if ( i >= c[j] && wh[i] - wh[i - c[j]] == 0 && s[i - c[j]] != 'X' && dp[max(i - c[j] - 1, 0)][j - 1] && s[i + 1] != 'X' && rdp[min(i + 2, s.size() - 1)][c.size() - j - 1] )
                                                                                                                                                          ^
In file included from /usr/include/c++/7/algorithm:62:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:65,
                 from paint.cpp:2:
/usr/include/c++/7/bits/stl_algo.h:3450:5: note: candidate: template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)
     min(initializer_list<_Tp> __l)
     ^~~
/usr/include/c++/7/bits/stl_algo.h:3450:5: note:   template argument deduction/substitution failed:
paint.cpp:94:154: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
    if ( i >= c[j] && wh[i] - wh[i - c[j]] == 0 && s[i - c[j]] != 'X' && dp[max(i - c[j] - 1, 0)][j - 1] && s[i + 1] != 'X' && rdp[min(i + 2, s.size() - 1)][c.size() - j - 1] )
                                                                                                                                                          ^
In file included from /usr/include/c++/7/algorithm:62:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:65,
                 from paint.cpp:2:
/usr/include/c++/7/bits/stl_algo.h:3456:5: note: candidate: template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)
     min(initializer_list<_Tp> __l, _Compare __comp)
     ^~~
/usr/include/c++/7/bits/stl_algo.h:3456:5: note:   template argument deduction/substitution failed:
paint.cpp:94:154: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
    if ( i >= c[j] && wh[i] - wh[i - c[j]] == 0 && s[i - c[j]] != 'X' && dp[max(i - c[j] - 1, 0)][j - 1] && s[i + 1] != 'X' && rdp[min(i + 2, s.size() - 1)][c.size() - j - 1] )
                                                                                                                                                          ^
paint.cpp:101:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 1; i < s.size() - 1; i++) {
                  ~~^~~~~~~~~~~~~~