Submission #1180810

#TimeUsernameProblemLanguageResultExecution timeMemory
1180810PieArmyChessboard (IZhO18_chessboard)C++20
100 / 100
342 ms3568 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
using namespace std;
#define int ll
ll n,m;
ll ans=0;
pair<pair<int,int>,pair<int,int>>arr[100023];

ll cal(int k,int a,int b,int h){
	int res=0;
	if(b/k==a/k){
		res=b-a+1;
	}
	else if(((a/k)&1)==((b/k)&1)){
		res=(k-(a%k))+(b%k)+1-k;
	}
	else{
		res=(k-(a%k))-(b%k)-1;
	}
	if(((a/k)&1)==((h/k)&1))res=-res;
	return res;
}

int32_t main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);
	cin>>n>>m;
	ans=n*n;
	for(int i=1;i<=m;i++){
		cin>>arr[i].fr.fr>>arr[i].fr.sc>>arr[i].sc.fr>>arr[i].sc.sc;
		arr[i].fr.fr--;
		arr[i].fr.sc--;
		arr[i].sc.fr--;
		arr[i].sc.sc--;
	}
	for(int i=1;i*i<=n;i++){
		if(i*(n/i)==n){
			ll sum=0;
			for(int j=1;j<=m;j++){
				sum+=cal(i,arr[j].fr.fr,arr[j].sc.fr,arr[j].fr.sc)*(((((arr[j].fr.fr/i)&1)==((arr[j].fr.sc/i)&1))?1:-1)*cal(i,arr[j].fr.sc,arr[j].sc.sc,arr[j].fr.fr));
			}
			ans=min(ans,min((((n/i)&1)?(n*n-i*i)/2:(n*n)/2)+sum,(((n/i)&1)?(n*n+i*i)/2:(n*n)/2)-sum));
			if(i==1)continue;
			i=n/i;
			sum=0;
			for(int j=1;j<=m;j++){
				sum+=cal(i,arr[j].fr.fr,arr[j].sc.fr,arr[j].fr.sc)*(((((arr[j].fr.fr/i)&1)==((arr[j].fr.sc/i)&1))?1:-1)*cal(i,arr[j].fr.sc,arr[j].sc.sc,arr[j].fr.fr));
			}
			ans=min(ans,min((((n/i)&1)?(n*n-i*i)/2:(n*n)/2)+sum,(((n/i)&1)?(n*n+i*i)/2:(n*n)/2)-sum));
			i=n/i;
		}
	}
	cout<<ans;
}
#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...