이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "paint.h"
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> ii;
std::string solve_puzzle(std::string s, std::vector<int> c) {
string rp;
rp.resize(s.size());
vector<int>id;
vector<int> p,b;
b.push_back(0);
bool sw1=0;
for(int i=0;i<s.size();i++){
if(s[i]=='_'){
sw1=1;
b.push_back(i);
// cout<<i<<" ";
}
}
if(sw1==1){
//cout<<endl;
// b.push_back(s.size());
int k=s.size()-1,l=s.size()-1,r=c.size()-1,bl=b.size()-2;
//bl=0;
vector<ii>vii;
while(true){
// printf("b[bl]: %d k: %d c[r]: %d l: %d\n", b[bl],k,c[r],l);
if(k<=b[bl]){
bl--;
k--;
}
if(k<=-1 or r<=-1){
break;
}
if(l-b[bl]>=c[r]){
int a,d;
a=k;
for(int i=0;i<c[r];i++){
rp[k]='X';
k--;
}
d=k;
vii.push_back(ii(a,d+1));
r--;
if(k-b[bl]>=c[r]){
rp[k]='_';
k--;
}
l=k;
}
else{
rp[k]='_';
k--;
l=k;
}
}
for(int i=0;i<rp.size();i++){
if(rp[i]!='X' and rp[i]!='_'){
rp[i]='_';
}
}
string rp1;
rp1.resize(s.size());
b.push_back(s.size());
k=0,l=0,r=0,bl=1;
bl=1;
vector<ii>vii1;
while(true){
/* cout<<rp1<<endl;
printf("b[bl]: %d k: %d c[r]: %d l: %d\n", b[bl],k,c[r],l);*/
if(s[k]=='_'){
rp1[k]='_';
k++;
}
if(k>=b[bl]){
bl++;
k++;
}
if(k>=s.size() or r>=c.size()){
break;
}
if(b[bl]-l>=c[r]){
int a,d;
a=k;
for(int i=0;i<c[r];i++){
rp1[k]='X';
k++;
}
d=k-1;
vii1.push_back(ii(a,d));
r++;
if(b[bl]-k>=c[r]){
rp1[k]='_';
k++;
}
l=k;
}
else{
rp1[k]='_';
k++;
l=k;
}
}
for(int i=0;i<rp.size();i++){
if(rp1[i]!='X' and rp1[i]!='_'){
rp1[i]='_';
}
}
bool sw=0;
//cout<<rp<<endl<<rp1<<endl;
/* for(int i=0;i<vii.size();i++){
cout<<vii[i].first<<" "<<vii[i].second<<endl;
}
cout<<endl;
for(int i=0;i<vii1.size();i++){
cout<<vii1[i].first<<" "<<vii1[i].second<<endl;
}
for(int i=0;i<b.size();i++){
cout<<b[i]<<" ";
}
cout<<endl;*/
int j,j1;
string ans;
ans.resize(s.size());
j=vii.size()-1;
j1=0;
int k1=0;
for(int i=0;i<vii.size();i++){
for(int k=vii1[j1].first;k<=vii[j].first;k++){
if(k>b[k1+1]){
k1++;
}
// cout<<b[k1+1]<<" "<<c[j]<<endl;
if(b[k1+1]-b[k1]>=c[j1] and k>=b[k1] and k<=b[k1+1]){
if(s[k]=='_'){
ans[k]='_';
}
else{
if(rp[k]==rp1[k] and rp[k]=='X'){
ans[k]=rp[k];
}
else{
ans[k]='?';
}
}
}
}
j--;
j1++;
}
for(int i=0;i<ans.size();i++){
if(ans[i]!='X' and ans[i]!='?' and ans[i]!='_')
ans[i]='_';
}
// cout<<ans<<endl;
return ans;
}
else{
string rp="";
vector<int>id;
for(int i=0;i<c.size();i++){
for(int j=0;j<c[i];j++){
rp+='X';
}
id.push_back(rp.size());
if(rp.size()==s.size()){
break;
}
rp+='_';
}
int t;
if(rp[rp.size()-1]=='_'){
t=1;
t+=(s.size()-rp.size());
for(int i=1;i<t;i++){
rp+='_';
}
}
else{
return rp;
}
// cout<<"t: "<<t<<endl;
/*for(int i=0;i<id.size();i++){
cout<<id[i]<<" ";
}
cout<<endl;*/
string ans;
ans.resize(rp.size());
//int id=0;
//cout<<rp<<" "<<t<<endl;
int j=0;
for(int i=0;i<rp.size();i++){
if(rp[i]=='X'){
if(id[j]-1>=i+t){
if(rp[i+t]=='X'){
ans[i+t]='X';
//ans[i]='?';
}
}
if(i==id[j]-1){
j++;
}
}
}
for(int i=0;i<ans.size();i++){
if(ans[i]!='X'){
ans[i]='?';
}
if(s[i]=='_'){
ans[i]='_';
}
}
// cout<<ans[7]<<endl;
return ans;}
}
컴파일 시 표준 에러 (stderr) 메시지
paint.cpp: In function 'std::__cxx11::string solve_puzzle(std::__cxx11::string, std::vector<int>)':
paint.cpp:13:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<s.size();i++){
~^~~~~~~~~
paint.cpp:58:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<rp.size();i++){
~^~~~~~~~~~
paint.cpp:80:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(k>=s.size() or r>=c.size()){
~^~~~~~~~~~
paint.cpp:80:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(k>=s.size() or r>=c.size()){
~^~~~~~~~~~
paint.cpp:105:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<rp.size();i++){
~^~~~~~~~~~
paint.cpp:130:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<vii.size();i++){
~^~~~~~~~~~~
paint.cpp:154:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<ans.size();i++){
~^~~~~~~~~~~
paint.cpp:110:10: warning: unused variable 'sw' [-Wunused-variable]
bool sw=0;
^~
paint.cpp:164:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<c.size();i++){
~^~~~~~~~~
paint.cpp:196:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<rp.size();i++){
~^~~~~~~~~~
paint.cpp:209:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<ans.size();i++){
~^~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |