Advertisement
fireLUFFY

BalancedRemainderCF

Jun 24th, 2021
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.94 KB | None | 0 0
  1. // AUTHOR: fireLUFFYY, NITR
  2. // Bhagwan, please AC karwa dena
  3.  
  4. #pragma GCC optimize("Ofast")
  5. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
  6. #pragma GCC optimize("unroll-loops")
  7. #pragma comment(linker, "/stack:200000000")
  8.  
  9. #include<bits/stdc++.h>
  10. #include<ext/pb_ds/assoc_container.hpp>
  11. #include<ext/pb_ds/tree_policy.hpp>
  12. #define int long long
  13. #define ull unsigned long long
  14. #define vi vector<int>
  15. #define vvl vector<vector<int>>
  16. #define deql deque<int>
  17. #define prquel priority_queue<int>
  18. #define loop(i,n) for(int i=0;i<n;i++)
  19. #define loopn(i,a,b) for(int i=a;i<=b;i++)
  20. #define rloop(i,n) for(int i=n;i>0;i--)
  21. #define sortv(a) sort(a.begin(),a.end())
  22. #define sortvr(a) sort(a.rbegin(),a.rend())
  23. #define verase(a) a.erase(unique(a.begin(),a.end()),a.end())
  24. #define all(a) a.begin(),a.end()
  25. #define getv(v,n) for(int i=0;i<n;i++){int x; cin>>x; v.push_back(x);};
  26. #define dbg(x) cerr<<#x<<" = "; _print(x);cerr<<"\n";
  27. #define mp make_pair
  28. #define pb push_back
  29. #define pf push_front
  30. #define fi first
  31. #define se second
  32. #define endl "\n"
  33. #define inf 2e18
  34. using namespace std;
  35. using namespace __gnu_pbds;
  36.  
  37. int MOD=1000000007;
  38. int mod=998244353;
  39. const int N=200050;
  40. const int nn=1000050;
  41. int fact[N]; // array to store values of factorial
  42. bool prime[nn]; //array to store precalculated primes till 10^6
  43. void _print(int a){cerr<<a;}  void _print(char a){cerr<<a;}  void _print(bool a){cerr<<a;}  void _print(string a){cerr<<a;}
  44. template<class T> void _print(vector<T> v1){ cerr<<"[ "; for(T i:v1){_print(i);cerr<<" ";}cerr<<"]";}
  45. template<class T> void _print(set<T> s1){ cerr<<"[ "; for(T i:s1){_print(i);cerr<<" ";}cerr<<"]";}
  46. typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> indexed_set;
  47. template<class T> T gcd(T a,T b){if(!a||!b)return a|b; unsigned shift=__builtin_ctz(a|b); a>>=__builtin_ctz(a); do{b>>=__builtin_ctz(b); if(a>b)swap(a,b);b-=a;}while(b); return a<<shift;}
  48. template<class T> T lcm(T a,T b){ unsigned val=max(a,b)/gcd(a,b);val*=min(a,b);return val;}
  49. bool pow2(int x){if(x&&(!(x&(x-1)))) return true; else return false;}
  50. int multiply(int x, int y){return (x * 1ll * y) % MOD;}
  51. int power(int x, int y){int z = 1;while(y){if(y & 1) z = multiply(z, x);x = multiply(x, x);y >>= 1;}return z;}
  52. int modInverse(int x){return power(x, MOD - 2);}
  53. int divide(int x, int y){return multiply(x, modInverse(y));}
  54. void cal_factorial(){fact[0] = 1;for(int i = 1; i < N; i++)fact[i] = multiply(fact[i - 1], i);}// function to calculate factorial upto N
  55. void cal_primes(){memset(prime,true,sizeof(prime)); loopn(i,2,sqrt(nn)){ if(prime[i]==true){ for(int j=i*i;j<=nn;j+=i){prime[j]=false;}}}}
  56. int nCr(int n, int k){return divide(fact[n], multiply(fact[k], fact[n - k]));}
  57. vector<int>Intersection(vi &v1,vi &v2){vi v3;sort(all(v1));sort(all(v2));set_intersection(all(v1),all(v2),back_inserter(v3));return v3;}
  58. vector<int>Union(vi &v1,vi&v2){vi v3;sort(all(v1));sort(all(v2));set_union(all(v1),all(v2),back_inserter(v3));return v3;}
  59. void FASTIO(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);}
  60.  
  61.  
  62. void solve(int t)
  63. {
  64.     int testcases=t;
  65.     while(t--)
  66.     {
  67.         //cout<<"#"<<(testcases-t)<<" Test-Case: "<<endl;
  68.         //cout<<"Case #"<<(testcases-t)<<": ";
  69.         int n,x,ans=0,dif;
  70.         cin>>n;
  71.         bool flag=true;
  72.         int a[3]={0,0,0};
  73.         loop(i,n)
  74.         {
  75.             cin>>x;
  76.             a[x%3]++;
  77.         }
  78.         int avg=(n/3);
  79.         while(flag)
  80.         {
  81.             flag=false;
  82.             loop(i,3)
  83.             {
  84.                 if(a[i]>avg)
  85.                 {
  86.                     flag=true;
  87.                     dif=(a[i]-avg);
  88.                     a[(i+1)%3]+=dif;
  89.                     a[i]-=dif;
  90.                     ans+=dif;
  91.                 }
  92.             }
  93.         }
  94.         cout<<ans<<endl;
  95.     }
  96. }
  97.  
  98. main()
  99. {
  100.     auto start=chrono::system_clock::now();
  101.     {
  102.         #ifndef ONLINE_JUDGE
  103.             freopen("input.txt","r",stdin);
  104.             freopen("output.txt","w",stdout);
  105.             freopen("error.txt","w",stderr);
  106.         #endif
  107.         FASTIO();  
  108.         int t=1;
  109.         cin>>t;
  110.         solve(t);
  111.     }
  112.     auto end=chrono::system_clock::now();
  113.     chrono::duration<double> elapsed=end-start;
  114. //  cout<<" Time taken: "<<elapsed.count()<<" sec";
  115.     return 0;
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement