제출 #129652

#제출 시각아이디문제언어결과실행 시간메모리
129652DanerZein전선 연결 (IOI17_wiring)C++14
13 / 100
35 ms2552 KiB
#include "wiring.h" #include <bits/stdc++.h> #define MAX 100000000 using namespace std; typedef pair<int,int> ii; long long min_total_length(std::vector<int> r, std::vector<int> b) { long long s=0,le,ri; le=0,ri; ri=b.size()-1; if(r[r.size()-1]<b[0]){ while(true){ s+=abs(r[le]-b[ri]); le++; ri--; if(le==r.size()){ if(ri==-1) break; else{ le--; while(true){ s+=abs(r[le]-b[ri]); ri--; if(ri==-1){ break; } } break; } } if(ri==-1){ if(le==r.size()){ break; } else{ ri++; while(true){ s+=abs(r[le]-b[ri]); le++; if(le==r.size()){ break; } } break; } } } if(le!=ri){ for(int i=le;i<=ri;i++){ s+=abs(r[le-1]-b[i]); } } return s; } else{ int ans=0,ma=-1; bool vis[10000]; int wi[100000]; memset(wi,-1,sizeof wi); memset(vis,false,sizeof vis); for(int i=0;i<r.size();i++){ wi[r[i]]=1; ma=max(ma,r[i]); } for(int i=0;i<b.size();i++){ wi[b[i]]=2; ma=max(ma,b[i]); } int l,r; vector<ii>wire; for(int i=0;i<=ma;i++){ if(wi[i]!=-1){ // cout<<i<<endl; wire.push_back(ii(wi[i],i)); } } wire.push_back(ii(wi[ma],ma)); //cout<<wire[wire.size()-1].second<<endl; int left,right; ans=0; left=right=0; for(int i=0;i<wire.size();i++){ //cout<<wire[i].first<<" "<<wire[i].second<<" "<<ans<<endl; if(wire[i].first!=wire[i+1].first){ continue; } if(vis[wire[i].second]==true){ continue; } int idr,idl; idr=idl=-1; int tc=wire[i].first; for(int j=i+1;j<wire.size();j++){ right++; if(tc!=wire[j].first){ idr=j; break; } } for(int j=i-1;j>=0;j--){ left++; if(tc!=wire[j].first){ idl=j; break; } } left=right =-1; left=abs(wire[i].second-wire[idl].second); right=abs(wire[i].second-wire[idr].second); if(left>right and idr!=-1){ ans+=right; vis[wire[idr].second]=1; vis[wire[i].second]=1; } else{ if(idl!=-1){ ans+=left; vis[wire[idl].second]=1; vis[wire[i].second]=1; } else{ ans+=right; vis[wire[idr].second]=1; vis[wire[i].second]=1; } } // printf("wire[i].first: %d wire[i].second: %d ans: %d left: %d right: %d\n",wire[i].first,wire[i].second,ans,left,right); } return ans; } } /* int main() { int n, m; assert(2 == scanf("%d %d", &n, &m)); vector<int> r(n), b(m); for(int i = 0; i < n; i++) assert(1 == scanf("%d", &r[i])); for(int i = 0; i < m; i++) assert(1 == scanf("%d", &b[i])); long long res = min_total_length(r, b); printf("%lld\n", res); return 0; } */

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

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:8:12: warning: right operand of comma operator has no effect [-Wunused-value]
     le=0,ri;
            ^
wiring.cpp:15:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(le==r.size()){
            ~~^~~~~~~~~~
wiring.cpp:31:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(le==r.size()){
                ~~^~~~~~~~~~
wiring.cpp:39:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                     if(le==r.size()){
                        ~~^~~~~~~~~~
wiring.cpp:60:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<r.size();i++){
                     ~^~~~~~~~~
wiring.cpp:64:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<b.size();i++){
                     ~^~~~~~~~~
wiring.cpp:81:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<wire.size();i++){
                     ~^~~~~~~~~~~~
wiring.cpp:92:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int j=i+1;j<wire.size();j++){
                           ~^~~~~~~~~~~~
wiring.cpp:68:13: warning: unused variable 'l' [-Wunused-variable]
         int l,r;
             ^
wiring.cpp:68:15: warning: unused variable 'r' [-Wunused-variable]
         int l,r;
               ^
#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...