답안 #1054276

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1054276 2024-08-12T08:20:08 Z FaustasK Palembang Bridges (APIO15_bridge) C++14
0 / 100
0 ms 604 KB
#include <bits/stdc++.h>

using namespace std;

struct gyventojas
{
    char p;
    int s;
    char q;
    int t;
};

const int maxn = 100000;
const long long daug = 1000000000000000;

int k, n, kiek;
gyventojas M[maxn];

vector <int> reikalingi;
vector <int> nereikalingi;
vector <int> medianai;
vector <int> unikalus;
set <int> buvo;

long long skaiciuok_keliu_suma(int tiltas1, int tiltas2)
{
    long long ats = 0;
    if(kiek>0)
    {
        if(k == 1)
        {
            for(int i = 0; i<reikalingi.size(); i++)
            {
                int j = reikalingi[i];
                ats += abs(M[j].s - tiltas1) + abs(M[j].t - tiltas1);
            }
        }
        else
        {
            for(int f = 0; f<reikalingi.size(); f++)
            {
                int x = reikalingi[f];
                int a1 = abs(M[x].s - tiltas1) + abs(M[x].t - tiltas1);
                int a2 = abs(M[x].s - tiltas2) + abs(M[x].t - tiltas2);
                ats += min(a1, a2);
            }
        }
    }
    for(int i = 0; i<nereikalingi.size(); i++)
    {
        int j = nereikalingi[i];
        ats += abs(M[j].s - M[j].t);
    }
    return ats + reikalingi.size();
}

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(0);
    cin >> k >> n;
    long long A_puse = 0;
    long long B_puse = 0;
    for(int i = 0; i<n; i++)
    {
        cin >> M[i].p >> M[i].s >> M[i].q >> M[i].t;
        if(M[i].p != M[i].q)
        {
            reikalingi.push_back(i);
            medianai.push_back(M[i].s);
            medianai.push_back(M[i].t);
            if(buvo.find(M[i].s) == buvo.end())
            {
                buvo.insert(M[i].s);
                unikalus.push_back(M[i].s);
            }
            if(buvo.find(M[i].t) == buvo.end())
            {
                buvo.insert(M[i].t);
                unikalus.push_back(M[i].t);
            }
        }
        else nereikalingi.push_back(i);
    }
    sort(medianai.begin(), medianai.end());
    kiek = reikalingi.size();

    if(k==1)
    {
        cout << skaiciuok_keliu_suma(medianai[medianai.size()/2], -1);
    }
    else
    {
        /*long long maz_ats = 1000000000000000;
        for(int i = 0; i<medianai.size(); i++)
        {
            for(int j = 0; j<medianai.size(); j++)
            {
                if(i == j) continue;
                maz_ats = min(maz_ats, skaiciuok_keliu_suma(medianai[i], medianai[j]));
            }
        }
        cout << maz_ats;*/
        int k = 0, d = 1;
        long long pries = daug;
        long long ats = daug;
        bool kur = 1;
        int nutraukti = 0;
        while(d<unikalus.size() && k<unikalus.size())
        {
            //cout << k << ' ' << d << endl;
            long long atstumas = skaiciuok_keliu_suma(unikalus[k], unikalus[d]);
            if(atstumas < pries)
            {
                pries = atstumas;
                ats = min(ats, atstumas);
                nutraukti = 0;
            }
            else
            {
                nutraukti++;
                pries = daug;
                if(kur)
                {
                    d--;
                    kur = 0;
                }
                else
                {
                    k--;
                    kur = 1;
                }

            }
            if(kur) d++;
            else k++;
            if(nutraukti > 5) break;
        }
        cout << ats;
    }
    return 0;
}

Compilation message

bridge.cpp: In function 'long long int skaiciuok_keliu_suma(int, int)':
bridge.cpp:32:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |             for(int i = 0; i<reikalingi.size(); i++)
      |                            ~^~~~~~~~~~~~~~~~~~
bridge.cpp:40:29: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |             for(int f = 0; f<reikalingi.size(); f++)
      |                            ~^~~~~~~~~~~~~~~~~~
bridge.cpp:49:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     for(int i = 0; i<nereikalingi.size(); i++)
      |                    ~^~~~~~~~~~~~~~~~~~~~
bridge.cpp: In function 'int main()':
bridge.cpp:108:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |         while(d<unikalus.size() && k<unikalus.size())
      |               ~^~~~~~~~~~~~~~~~
bridge.cpp:108:37: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |         while(d<unikalus.size() && k<unikalus.size())
      |                                    ~^~~~~~~~~~~~~~~~
bridge.cpp:61:15: warning: unused variable 'A_puse' [-Wunused-variable]
   61 |     long long A_puse = 0;
      |               ^~~~~~
bridge.cpp:62:15: warning: unused variable 'B_puse' [-Wunused-variable]
   62 |     long long B_puse = 0;
      |               ^~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 0 ms 348 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 0 ms 604 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -