제출 #132461

#제출 시각아이디문제언어결과실행 시간메모리
132461DanerZeinPaint By Numbers (IOI16_paint)C++14
32 / 100
2 ms396 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...