Submission #618053

#TimeUsernameProblemLanguageResultExecution timeMemory
618053OzyWiring (IOI17_wiring)C++17
13 / 100
48 ms16796 KiB
#include "wiring.h" #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for (int i = (a); i <= (b); i++) #define repa(i,a,b) for (int i = (a); i >= (b); i--) #define lli long long int #define debug(a) cout << #a << " = " << a << endl #define debugsl(a) cout << #a << " = " << a << ", " #define INF (1ll << 60) lli apu,pos,res,last[2],otro,dis,doble,n; vector<pair<lli,lli> > g1,g2,orden; vector<lli> izq,der,MIN; long long min_total_length(std::vector<int> r, std::vector<int> b) { for (auto act : r) orden.push_back({act,0}); for (auto act : b) orden.push_back({act,1}); sort(orden.begin(), orden.end()); apu = 0; n = orden.size(); last[0] = INF; last[1] = INF; izq.resize(n); rep(i,0,n-1) { last[orden[i].second] = orden[i].first; otro = orden[i].second^1; if (last[otro] != INF) izq[i] = orden[i].first - last[otro]; else izq[i]= INF; } last[0] = INF; last[1] = INF; der.resize(n); repa(i,n-1,0) { last[orden[i].second] = orden[i].first; otro = orden[i].second^1; der[i] = last[otro] - orden[i].first; } MIN.resize(n); rep(i,0,n-1) MIN[i] = min(izq[i],der[i]); res = 0; while (apu < n) { g2.push_back({orden[apu].first,apu}); apu++; while (apu < n && orden[apu].second == orden[apu-1].second) {g2.push_back({orden[apu].first, apu}); apu++;} pos = 0; while (pos < g1.size() && pos < g2.size()) { dis = g2[pos].first - g1[pos].first; doble =MIN[g2[pos].second] + MIN[g1[pos].second]; if (doble < dis) break; res += dis; pos++; } if (!g1.empty()) rep(i,pos,g1.size()-1) res += MIN[g1[i].second]; g1.clear(); if (!g2.empty()) repa(i,g2.size()-1,pos) g1.push_back(g2[i]); g2.clear(); //for (auto act : g1) {debugsl(act.first); debug(act.second);} //cout << endl; } for (auto act : g1) res += MIN[act.second]; return res; }

Compilation message (stderr)

wiring.cpp: In function 'long long int min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:56:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |         while (pos < g1.size() && pos < g2.size()) {
      |                ~~~~^~~~~~~~~~~
wiring.cpp:56:39: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |         while (pos < g1.size() && pos < g2.size()) {
      |                                   ~~~~^~~~~~~~~~~
wiring.cpp:4:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define rep(i,a,b) for (int i = (a); i <= (b); i++)
      |                                        ^
wiring.cpp:67:26: note: in expansion of macro 'rep'
   67 |         if (!g1.empty()) rep(i,pos,g1.size()-1) res += MIN[g1[i].second];
      |                          ^~~
#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...