Advertisement
Gustavo_Inzunza

square

Jul 17th, 2013
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <algorithm>
  5. using namespace std;
  6. int busco,N,M;
  7. int largos[22];
  8. int flagg=0;
  9. void back(int mask, int coincidencias, int valor_actual, int pos)
  10. {
  11.     if(flagg)
  12.         return;
  13.     if(coincidencias==4 or mask==(1<<(M+1))-1 )    
  14.     {
  15.         flagg=1;
  16.         return;
  17.     }
  18.     for(int i=pos;i<M;i++)
  19.     {
  20.                
  21.         if(flagg)
  22.             return;
  23.         if(!(mask&(1<<i)) and largos[i]+valor_actual<busco)
  24.             for(int j=i+1;j<M;j++)
  25.             {
  26.                                
  27.                 if(flagg)
  28.                     return;
  29.                 if(!(mask&(1<<j)) and largos[i]+largos[j]+valor_actual<=busco)//pa que no se pase
  30.                 {
  31.                                        
  32.                     if(flagg)
  33.                          return;
  34.                     if(largos[i]+largos[j]+valor_actual<busco)
  35.                     {
  36.                         back(mask | (1<<j) | (1<<i),coincidencias,valor_actual+largos[i]+largos[j],j+1);
  37.                     }
  38.                     else
  39.                         if(largos[i]+largos[j]+valor_actual==busco)
  40.                         {                          
  41.                             if(flagg)
  42.                                 return;
  43.                             if(coincidencias+1==4)
  44.                             {
  45.                                 flagg=1;
  46.                                 return;
  47.                             }
  48.                             back(mask | (1<<j) | (1<<i),coincidencias+1,0,0);
  49.                         }
  50.                 }
  51.             }
  52.             if(!(mask&(1<<i)) and largos[i]+valor_actual==busco)
  53.             {
  54.                 if(coincidencias+1==4)
  55.                 {
  56.                     flagg=1;
  57.                     return;
  58.                 }
  59.                 back(mask | (1<<i),coincidencias+1,0,0);
  60.             }
  61.         }
  62. }
  63. int main()
  64. {
  65.         scanf("%d",&N);
  66.         for(int i=0;i<N;i++)
  67.         {
  68.                 scanf("%d",&M);
  69.                 int sum=0;
  70.                 for(int j=0;j<M;j++)
  71.                 {
  72.                         scanf("%d",&largos[j]);
  73.                         sum+=largos[j];
  74.                 }
  75.                 if(sum%4)
  76.                         printf("no\n");
  77.                 else
  78.                 {
  79.                         busco=sum/4;
  80.                         int coincide=0;
  81.                         for(int j=0;j<M;j++)
  82.                             if(largos[j]==busco)
  83.                                 coincide++;
  84.                         if(coincide==4)
  85.                         {
  86.                            printf("yes\n");
  87.                            continue;
  88.                         }
  89.                         flagg=0;
  90.                         int mascara=1<<M;
  91.                         back(mascara,0,0,0);
  92.                         if(flagg)
  93.                                 printf("yes\n");
  94.                         else
  95.                            printf("no\n");
  96.                 }
  97.         }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement