Joe the Farmer owns a square plot of farmland whose sides are of length N. The land is split into N rows and N columns of equal size, so that there are N2 identical square fields within the farmland. Thanks to the abundant crops that Joe harvested last year, he could afford to buy N sprinklers. They significantly reduce the amount of time that Joe spends watering his plants.
Every sprinkler can be placed in any field of the farmland, but no two sprinklers can occupy the same field. Upon activation, each sprinkler irrigates every field within the same column and row in which it appears.
After delivery, the sprinklers were placed in a batch, so the K-th sprinkler is positioned in field (XK, YK). Joe knows that this arrangement is not optimal, as some fields may not be watered by any sprinkler. Moreover, no column or row should be watered by more than one sprinkler, as it may cause over-hydration of the crops.
In one move, the farmer can move a single sprinkler to an adjacent unoccupied field. Two fields are adjacent to one another if they have a common side.
What is the minimum number of moves required to rearrange the sprinklers so that all fields will be irrigated by sprinklers, and no two sprinklers will water the same column or row? Since the answer can be very large, provide it modulo 1,000,000,007 (109 + 7).
Write a function:
int solution(vector<int> &X, vector<int> &Y);
that, given arrays X and Y, both consisting of N integers and representing the coordinates of consecutive sprinklers, returns a minimal number of moves modulo 1,000,000,007, required to irrigate all fields.
For example, given array X = [1, 2, 2, 3, 4] and array Y = [1, 1, 4, 5, 4] the function should return 5, as we can make following moves:
For another example, given array X = [1, 1, 1, 1] and array Y = [1, 2, 3, 4] the function should return 6:
Given array X = [1, 1, 2] and array Y = [1, 2, 1] the function should return 4:
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [2..100,000];
- each element of arrays X and Y is an integer within the range [1..N];
- each sprinkler appears in a distinct field (no field may contain more than one sprinkler).
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
ve
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
vector<int>
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n =
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> count()
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> count(n + 1, 0);
for (int i = 0; i < n; i++) {
count[x[i]]++;
}
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> count(n + 1, 0);
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
for (int i = 1; i <= n; i++) {
}
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
vector<pair<int, int> > order;
for (int i = 1; i <= n; i++) {
if (count[i].size() == 0) continue;
for ()
}
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
vector<pair<int, int> > order;
int r = 0; // current row to be filled.
int ans = 0;
for (int i = 1; i <= n; i++) {
if (count[i].size() == 0) continue;
for (auto y: count[i]) {
a
}
}
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
vector<pair<int, int> > order;
int r = 1; // current row to be filled.
int ans = 0;
for (int i = 1; i <= n; i++) {
if (count[i].size() == 0) continue;
for (auto y: count[i]) {
ans += abs(i - r);
order.push_back({})
}
}
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
vector<pair<int, int> > order;
int r = 1; // current row to be filled.
int ans = 0;
for (int i = 1; i <= n; i++) {
if (count[i].size() == 0) continue;
for (auto y: count[i]) {
ans += abs(i - r);
order.push_back({r, y});
r++;
}
}
}
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
vector<pair<int, int> > order;
int r = 1; // current row to be filled.
int ans = 0;
for (int i = 1; i <= n; i++) {
if (count[i].size() == 0) continue;
for (auto y: count[i]) {
ans += abs(i - r);
ans %= mod;
order.push_back({r, y});
r++;
}
}
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
vector<pair<int, int> > order;
int r = 1; // current row to be filled.
int ans = 0;
for (int i = 1; i <= n; i++) {
if (count[i].size() == 0) continue;
for (auto y: count[i]) {
ans += abs(i - r);
ans %= mod;
order.push_back({r, y});
r++;
}
}
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]].push_back(Y[i]);
}
vector<pair<int, int> > order;
int r = 1; // current row to be filled.
int ans = 0;
for (int i = 1; i <= n; i++) {
if (count[i].size() == 0) continue;
for (auto y: count[i]) {
ans += abs(i - r);
ans %= mod;
order.push_back({r, y});
r++;
}
}
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]]++;
}
int ans = 0;
for (int i = 1; i <= n; i++) {
for
}
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]]++;
}
int ans = 0;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < count[i]; sprinkle++) {
ans += abs(i - r);
ans %
}
}
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> count(n + 1, vector<int>());
for (int i = 0; i < n; i++) {
count[x[i]]++;
}
int ans = 0;
int r = 0;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < count[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
}
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<vector<int>> rows(n + 1, 0), cols(n + 1, 0);
for (int i = 0; i < n; i++) {
rows[x[i]]++;
cols[y[i]]++;
}
int ans = 0;
int r = 0;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < count[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
}
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> rows(n + 1, 0), cols(n + 1, 0);
for (int i = 0; i < n; i++) {
rows[x[i]]++;
cols[y[i]]++;
}
int ans = 0;
int r = 0;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < rows[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
for (int sprinkle = 0; sprinkle < cols[i]; sprinkle++) {
ans += abs(i - c);
ans %= mod;
c++;
}
}
return ans;
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> rows(n + 1, 0), cols(n + 1, 0);
for (int i = 0; i < n; i++) {
rows[x[i]]++;
cols[y[i]]++;
}
int ans = 0;
int r = 1, c = 1;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < rows[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
for (int sprinkle = 0; sprinkle < cols[i]; sprinkle++) {
ans += abs(i - c);
ans %= mod;
c++;
}
}
return ans;
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> rows(n + 1, 0), cols(n + 1, 0);
for (int i = 0; i < n; i++) {
rows[x[i]]++;
cols[y[i]]++;
}
int ans = 0;
int r = 1, c = 1;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < rows[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
for (int sprinkle = 0; sprinkle < cols[i]; sprinkle++) {
ans += abs(i - c);
ans %= mod;
c++;
}
}
return ans;
}
func.cpp: In function 'int solution(std::vector<int>&, std::vector<int>&)': func.cpp:16:14: error: 'x' was not declared in this scope rows[x[i]]++; ^ func.cpp:17:14: error: 'y' was not declared in this scope cols[y[i]]++; ^
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> rows(n + 1, 0), cols(n + 1, 0);
for (int i = 0; i < n; i++) {
rows[X[i]]++;
cols[Y[i]]++;
}
int ans = 0;
int r = 1, c = 1;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < rows[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
for (int sprinkle = 0; sprinkle < cols[i]; sprinkle++) {
ans += abs(i - c);
ans %= mod;
c++;
}
}
return ans;
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> rows(n + 1, 0), cols(n + 1, 0);
for (int i = 0; i < n; i++) {
rows[X[i]]++;
cols[Y[i]]++;
}
int ans = 0;
int r = 1, c = 1;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < rows[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
for (int sprinkle = 0; sprinkle < cols[i]; sprinkle++) {
ans += abs(i - c);
ans %= mod;
c++;
}
}
return ans;
}
// you can use includes, for example:
#include <vector>
#include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
const int mod = (int) 1e9 + 7;
int solution(vector<int> &X, vector<int> &Y) {
// write your code in C++14 (g++ 6.2.0)
int n = X.size();
vector<int> rows(n + 1, 0), cols(n + 1, 0);
for (int i = 0; i < n; i++) {
rows[X[i]]++;
cols[Y[i]]++;
}
int ans = 0;
int r = 1, c = 1;
for (int i = 1; i <= n; i++) {
for (int sprinkle = 0; sprinkle < rows[i]; sprinkle++) {
ans += abs(i - r);
ans %= mod;
r++;
}
for (int sprinkle = 0; sprinkle < cols[i]; sprinkle++) {
ans += abs(i - c);
ans %= mod;
c++;
}
}
return ans;
}
The solution obtained perfect score.
Test with one sprinkler in the corner and all the others very close to diagonal
All sprinklers are gathered in left upper corner / right lower corner