CSES - APIO 2015 - Results
Submission details
Task:Palembang Bridges
Sender:Lieska
Submission time:2019-04-04 13:22:05 +0300
Language:C++
Status:COMPILE ERROR

Compiler report

input/code.cpp:4:58: error: 'll y1' redeclared as different kind of symbol
 ll k, n, a, b, x, t[100001], r[100001], y, z, p[100001], y1;
                                                          ^~
In file included from /usr/include/features.h:424:0,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/os_defines.h:39,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/c++config.h:533,
                 from /usr/include/c++/7/cassert:43,
                 from /usr/include/x86_64-linux-gnu/c++/7/bits/stdc++.h:33,
                 from input/code.cpp:1:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:221:1: note: previous declaration 'double y1(double)'
 __MATHCALL (y1,, (_Mdouble_));
 ^
input/code.cpp: In function 'int main()':
input/code.cpp:36:12: error: assignment of function 'double y1(double)'
         y1=1e18;
            ^~~~
input/code.cpp:36:12: error: cannot convert 'double' to 'double(double) throw ()' in assignment
input/code.cpp:52:23: error: ISO C++...

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll k, n, a, b, x, t[100001], r[100001], y, z, p[100001], y1;
char c, c1;
multiset<ll> s;
int main(){
    cin >> k >> n;
    for (int i=1; i<=n; ++i){
        cin >> c >> a >> c1 >> b;
        x+=abs(b-a);
        if (c!=c1){
            if (a>b) swap(a,b);
            t[i]=a;
            r[i]=b;
            p[i]=1;
            s.insert(a);
            s.insert(b);
            y++;
            x++;
        }
    }
    if (k==1){
        a=1;
        auto it=s.begin();
        while (a<=y){
            a++;
            it++;
        }
        a=*it;
        for (int i=1; i<=n; ++i) {
            if (p[i] && ((a<t[i] && a<r[i]) || (a>t[i]&& a>r[i]))) x+=2*(min(abs(t[i]-a),abs(r[i]-a)));
        }
    }
    if (k==2){
        y1=1e18;
        auto it=s.begin();
        while (it!=s.end()){
            auto ir=s.find(*it);
            ir++;
            while (ir!=s.end()){
                z=0;
                a=*it;
                b=*ir;
                for (int i=1; i<=n; ++i) {
                    if (p[i]){
                        if (a>t[i] && a>r[i]) z+=2*(a-r[i]);
                        else if (b<t[i] && b<r[i]) z+=2*(t[i]-b);
                        else if (a<t[i] && a<r[i] && b>t[i] && b>r[i]) z+=2*(min(t[i]-a, b-r[i]));
                    }
                }
                if (z<y1) y1=z;
                ir++;
            }
            it++;
        }
    }
    cout << x+y1;
}