Riz1Ahmed

Chef and Minimum Colouring

Nov 10th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long int
  3. const ll M=1e9+7;
  4. using namespace std;
  5. vector<ll>v[100005];
  6. ll ans,m;
  7. void solve(ll p,ll mn,ll mx){
  8.     //printf("%lld %lld %lld\n",p,mn,mx);
  9.     if (p==m){
  10.         ans=min(ans,mx-mn);
  11.         return;
  12.     }
  13.     ll mx1=upper_bound(v[p].begin(),v[p].end(),mx)-v[p].begin()-1;
  14.     if (mx1<0) mx1++;
  15.     if (mn<=v[p][mx1] && v[p][mx1]<=mx){
  16.         solve(p+1,mn,mx);
  17.         return;
  18.     }
  19.  
  20.     if (v[p][mx1]<mx) mx1++;
  21.     ll mn1=upper_bound(v[p].begin(),v[p].end(),mn)-v[p].begin()-1;
  22.     if (mn1<0) mn1++;
  23.     //printf("mn1=%lld mx1=%lld\n",mn1,mx1);
  24.  
  25.     if (mx1>=v[p].size()) solve(p+1,v[p][mn1],mx);
  26.     else{
  27.         if (mn<v[p][mn1] || v[p][mx1]-mx < mn-v[p][mn1])
  28.              solve(p+1,mn,v[p][mx1]);
  29.         else if(v[p][mx1]-mx == mn-v[p][mn1]){
  30.             solve(p+1,v[p][mn1],mx);
  31.             solve(p+1,mn,v[p][mx1]);
  32.         }
  33.         else solve(p+1,v[p][mn1],mx);
  34.     }
  35.     return;
  36. }
  37. int main(){
  38. //  freopen("in.txt","r",stdin);
  39. //  freopen("out.txt","w",stdout);
  40.     ios_base::sync_with_stdio(0);
  41.     cin.tie(0),cout.tie(0);
  42.     ll t,n,i,x;
  43.     cin>>t;
  44.     while(cin>>n>>m){
  45.         for (i=0; i<m; i++)v[i].clear();
  46.         for (i=0; i<n; i++){
  47.             cin>>x;
  48.             v[i%m].push_back(x);
  49.         }
  50.         for (i=0; i<m; i++)
  51.             sort(v[i].begin(),v[i].end());
  52. //      for (i=0; i<m; i++){
  53. //          for (int j=0; j<v[i].size(); j++)
  54. //              printf("%lld ",v[i][j]);
  55. //          puts("");
  56. //      }
  57.         ans=1e9;
  58.         for (i=0; i<v[0].size(); i++)
  59.             solve(1,v[0][i],v[0][i]);
  60.         cout<<ans<<endl;
  61.     }
  62.     return 0;
  63. }
Add Comment
Please, Sign In to add comment