#include <bits/stdc++.h>
using namespace std;
#define task "15_bridge"
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FOD(i, a, b) for (int i = (a); i >= (b); i--)
#define F first
#define S second
#define ll long long
typedef pair<int, int> ii;
template<class X, class Y>
bool minimize(X &x, Y y) {
if (x > y) {
x = y;
return true;
}
return false;
}
const int N = (int)1e5 + 5;
int numBridge, numCitizen;
vector<ii> citizens;
ll sameSide = 0;
namespace sub3 {
bool valid() {
return (numBridge == 2 && numCitizen <= 100) || (numBridge == 1 && numCitizen <= 1000);
}
void solve() {
ll ans = LLONG_MAX;
int n = citizens.size();
if (numBridge == 2) {
FOR(a, 0, n - 1) {
FOR(b, 0, n - 1) {
if (a == b) continue;
ll curF = 0, curS = 0;
FOR(i, 0, n - 1) {
curF += min(abs(citizens[i].F - citizens[a].F) + abs(citizens[i].S - citizens[a].F), abs(citizens[i].F - citizens[b].F) + abs(citizens[i].S - citizens[b].F));
curS += min(abs(citizens[i].F - citizens[a].S) + abs(citizens[i].S - citizens[a].S), abs(citizens[i].F - citizens[b].S) + abs(citizens[i].S - citizens[b].S));
}
minimize(ans, min(curF, curS));
}
}
}
else {
FOR(a, 0, n - 1) {
ll curF = 0, curS = 0;
FOR(i, 0, n - 1) {
curF += abs(citizens[i].F - citizens[a].F) + abs(citizens[i].S - citizens[a].F);
curS += abs(citizens[i].F - citizens[a].S) + abs(citizens[i].S - citizens[a].S);
}
minimize(ans, min(curF, curS));
}
}
cout << ans + sameSide + n << "\n";
}
}
int main() {
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> numBridge >> numCitizen;
FOR(i, 1, numCitizen) {
char a, b;
int x, y;
cin >> a >> x >> b >> y;
if (a == b) sameSide += 1LL * abs(x - y);
else citizens.push_back({x, y});
}
if (sub3::valid()) sub3::solve();
return 0;
}
Compilation message (stderr)
bridge.cpp: In function 'int main()':
bridge.cpp:67:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
67 | freopen(task".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
bridge.cpp:68:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
68 | freopen(task".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |