FARMER JOHN'S FAV OPERATION

Revision en1, by codersaky77, 2026-06-01 21:27:47

I came across this question from USACO SILVER 2025, being new on cf took me hour(s) to crack it, and when I did, it used a basic property that SUM(abs(a[i]-x)) 1<=i<=n in an array a , is minimum if x is median. Sharing my approach and solution, Open for suggestions on how to improve thought process.

CODE->

include <bits/stdc++.h>

using namespace std;

define fastio() ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)

define int long long

define double long double

typedef long long ll; typedef unsigned long long ull; typedef vector vi; typedef vector vll; typedef pair<int,int> pii; typedef pair<ll,ll> pll;

define pb push_back

define ff first

define ss second

define all(x) (x).begin(), (x).end()

define rall(x) (x).rbegin(), (x).rend()

define YES cout << "YES\n"

define NO cout << "NO\n"

define endl '\n'

define IN_VEC(v,n) vector v(n); for(auto &i : v) cin >> i;

define IN_ARR(arr,n) for(int i=0;i<n;i++) cin >> arr[i];

const ll INF = 1e18; const int MOD = 1e9 + 7; void solve() { int n,m; cin>>n>>m; vector a(n),pref(2*n+1,0); for(int i=0;i<n;++i){ int y; cin>>y; a[i]=y%m; } sort(all(a)); for(int i=0;i<n;++i){ a.pb(a[i]+m); } for(int i=1;i<=2*n;++i){ pref[i]=pref[i-1]+a[i-1]; } int ans=INF; for(int i=0;i<n;++i){ // window from i to i+n-1 is sorted and shows unwraping of circle, its median minimizes cost // each cut fixes x%m, there are n distinct cuts, so n distinct x%m that can minimize cost // make min cost over them // for a fixes cut this is just linear absolute sum --> min at median if sorted, which is!! int me=i+n/2; int t1=(me-i)*a[me]; int t2=(pref[me]-pref[i]); int t3=(pref[n+i]-pref[me]); int t4=(n+i-me)*a[me]; ans=min(ans,t1+t3-t2-t4); } cout<<ans<<endl; }

int32_t main() { fastio(); int t = 1; cin >> t; while(t--) { solve(); } return 0; }

Tags median, prefix sum, usaco

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en3 English codersaky77 2026-06-01 21:30:09 95
en2 English codersaky77 2026-06-01 21:28:52 55
en1 English codersaky77 2026-06-01 21:27:47 2112 Initial revision (published)