Advertisement
knightL

D Brute

Dec 8th, 2013
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #include <cstdio>
  2. #include <list>
  3. #include <cstring>
  4. #include <string>
  5. #include <queue>
  6. #include <algorithm>
  7. #include <iostream>
  8. #include <cassert>
  9. #include <vector>
  10. using namespace std;
  11. #define REP(i,n) for(int i=0;i<(int)(n);i++)
  12. typedef long long ll;
  13.  
  14. int nextint()
  15. {
  16.     int t;
  17.     scanf("%d",&t);
  18.     return t;
  19. }
  20.  
  21. int n,k;
  22. int a[21];
  23. int b[21];
  24. int sum[21];
  25. int res=1000000000;
  26.  
  27. int gcd(int a, int b)
  28. {
  29.     return b?gcd(b,a%b):a;
  30. }
  31. int iters=0;
  32. void solve(int cur, int prev, int r)
  33. {
  34.     if(r+prev*(n-cur)-sum[cur]>=res) return;
  35.     iters++;
  36.     if(cur==n)
  37.     {
  38.         res=r;
  39.         return;
  40.     }
  41.     for(int j=(max(a[cur],prev)+k-1)/k*k;;j+=k)
  42.     {
  43. //      if(j%k==0)
  44.         {
  45.             b[cur]=j;
  46.             bool ok=true;
  47.             REP(a,cur)
  48.                 if(gcd(b[a],j)!=k)
  49.                 {
  50.                     ok=false;
  51.                     break;
  52.                 }
  53.             if(ok)
  54.                 solve(cur+1,j,r+j-a[cur]);
  55.         }
  56.         if(r+j*(n-cur)-sum[cur]>=res) break;
  57.     }
  58. }
  59.  
  60. int main()
  61. {
  62.     int t;
  63.     scanf("%d",&t);
  64.     for(int test=1;test<=t;test++)
  65.     {
  66.         res=1000000000;
  67.         scanf("%d%d",&n,&k);
  68.         REP(i,n)
  69.             scanf("%d",&a[i]);
  70.         sum[n]=0;
  71.         sort(a,a+n);
  72.         for(int i=n-1;i>=0;i--)
  73.             sum[i]=sum[i+1]+a[i];
  74.         iters=0;
  75.         solve(0,0,0);
  76.         printf("Case #%d: %d\n",test,res);
  77.         fprintf(stderr,"Iters #%d: %d\n",test,iters);
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement