Submission #100472

#TimeUsernameProblemLanguageResultExecution timeMemory
100472davitmargChessboard (IZhO18_chessboard)C++17
100 / 100
722 ms6776 KiB
/*
DEATH-MATCH
Davit-Marg
*/
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <iterator>
#include <ctype.h>
#include <stdlib.h>  
#include <fstream>  
#define mod 1000000007ll
#define LL long long
#define LD long double
#define MP make_pair
#define PB push_back
using namespace std;

LL n, k, best = mod * mod;
pair<LL, LL> c1[100005], c2[100005];
vector<LL> d;

LL check(LL d)
{
	LL r = (n*n) / (d*d) / 2 * (d*d);
	if (((n*n) / (d*d)) % 2 == 1)
		r += d * d;

	vector<int> prk(n+5,0), prz(n + 5,0);
	for (int i = 1; i <= n; i++)
	{
		prk[i] = prk[i - 1];
		if (((i-1) / d) % 2 == 0)
			prk[i]++;
		prz[i] = i - prk[i];
	}


	for (LL i = 0; i < k; i++)
	{
		LL zx = prz[c2[i].first] - prz[c1[i].first - 1], zy = prz[c2[i].second] - prz[c1[i].second - 1];
		LL kx = prk[c2[i].first] - prk[c1[i].first - 1], ky = prk[c2[i].second] - prk[c1[i].second - 1];
		r -= zx * zy;
		r -= kx * ky;
		r += kx * zy;
		r += zx * ky;
	}
	return r;
}

int main()
{
	cin >> n >> k;
	for (LL i = 1; i <= n / 2; i++)
		if (n%i == 0)
			d.PB(i);
	for (LL i = 0; i < k; i++)
	{
		cin >> c1[i].first >> c1[i].second >> c2[i].first >> c2[i].second;
	}

	for (LL i = 0; i < d.size(); i++)
	{
		LL ans = check(d[i]);
		best = min(best, min(n*n - ans, ans));
	}

	cout << best << endl;
	return 0;
}

Compilation message (stderr)

chessboard.cpp: In function 'int main()':
chessboard.cpp:70:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (LL i = 0; i < d.size(); i++)
                 ~~^~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...