Submission #129219

#TimeUsernameProblemLanguageResultExecution timeMemory
129219DanerZeinWiring (IOI17_wiring)C++14
13 / 100
36 ms3840 KiB
#include "wiring.h"
#include <bits/stdc++.h>
#define MAX 100000000
using namespace std;
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 wi[100010],ma=-1;
        bool vis[100010];
        memset(wi,-1,sizeof wi);
        memset(vis,0,sizeof vis);
        for(int i=0;i<r.size();i++){
            ma=max(ma,r[i]);
            wi[r[i]]=1;
        }
        for(int i=0;i<b.size();i++){
            wi[b[i]]=2;
            ma=max(ma,b[i]);
        }
        int ans=0,c=r.size()+b.size();
        for(int i=0;i<ma;i++){
            if(wi[i]==1){
                int left=0,right=0,idl,idr;
                for(int j=i;j<ma;j++){
                    left++;
                    if(wi[j]==2){
                        idl=j;
                        break;
                    }
                }
                for(int j=i;j>=0;j--){
                    right++;
                    if(wi[j]==1){
                        idr=j;
                        break;
                    }
                }
                if(vis[idl]==1 and vis[idr]==1){
                    if(left>right){
                        ans+=right;
                    }
                    else{
                        ans+=left;
                    }
                }
                else{
                    if(vis[idl]==1){
                        ans+=right;
                        vis[idr]=1;
                    }
                    else{
                        ans+=left;
                        vis[idl]=1;
                    }
                }
            }
        }
        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;
}*/

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:7:12: warning: right operand of comma operator has no effect [-Wunused-value]
     le=0,ri;
            ^
wiring.cpp:14:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(le==r.size()){
            ~~^~~~~~~~~~
wiring.cpp:30:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(le==r.size()){
                ~~^~~~~~~~~~
wiring.cpp:38:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                     if(le==r.size()){
                        ~~^~~~~~~~~~
wiring.cpp:58:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<r.size();i++){
                     ~^~~~~~~~~
wiring.cpp:62:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<b.size();i++){
                     ~^~~~~~~~~
wiring.cpp:66:19: warning: unused variable 'c' [-Wunused-variable]
         int ans=0,c=r.size()+b.size();
                   ^
wiring.cpp:84:27: warning: 'idl' may be used uninitialized in this function [-Wmaybe-uninitialized]
                 if(vis[idl]==1 and vis[idr]==1){
                    ~~~~~~~^
#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...