ulvis.paste.net

Paste Search Dynamic
Recent pastes
record
  1. #include <stdio.h>
  2.  
  3. void fill(int v[4][2], int i)
  4. {
  5.         v[i][1] = v[i][0];
  6. }
  7.  
  8. void empty(int v[4][2], int i)
  9. {
  10.         v[i][1] = 0;
  11. }
  12.  
  13. void pour(int v[4][2], int i, int j)
  14. {
  15.         if (v[j][0]-v[j][1] >= v[i][1])
  16.         {
  17.                 v[j][1] = v[j][1] + v[i][1];
  18.                 v[i][1] = 0;
  19.         }
  20.         else
  21.         {
  22.                 v[i][1] = v[i][1] - (v[j][0] - v[j][1]);
  23.                 v[j][1] = v[j][0];
  24.         }
  25. }
  26.  
  27. int check(int v[4][2], int record[500000][4], int r[0], int T, int z[1], int count, int t[1])
  28. {
  29.         int tmp;
  30.         for (int i = 0; i < r[0]; i++)
  31.         {
  32.                 tmp = 0;
  33.                 for (int j = 0; j < 4; j++)
  34.                 {
  35.                         if (v[j][1] != record[i][j])
  36.                         {
  37.                                 tmp = 1;
  38.                                 j = 4;
  39.                         }
  40.                 }
  41.                 if (tmp == 0)
  42.                 {
  43.                         return 0;
  44.                 }
  45.         }
  46.         for (int i = 0; i < 4; i++)
  47.         {
  48.                 if (v[i][1] == T)
  49.                 {
  50.                         z[0] = 6000000;
  51.                         t[0] = 1;
  52.                         r[0] = 6000000;
  53.                         printf("%d\n", count);
  54.                         return 1;
  55.                 }
  56.         }
  57.         for (int k = 0; k < 4; k++)
  58.         {
  59.                 record[r[0]][k] = v[k][1];
  60.         }
  61.         r[0]++;
  62.         return 0;
  63. }
  64.  
  65. int main(void) {
  66.         int a, b, c, d, T;
  67.         while (scanf("%d %d %d %d %d", &a, &b, &c, &d, &T) != EOF)
  68.         {
  69.                 if (T > a && T > b && T > c && T > d)
  70.                 {
  71.                         printf("-1\n");
  72.                 }
  73.                 else if(T == a || T == b || T == c || T == d)
  74.                 {
  75.                         printf("1\n");
  76.                 }
  77.                 else
  78.                 {
  79.                         int count = 1, v[4][2], record[500000][4], r[1], s = 0, t[1];
  80.                         t[0] = 0;
  81.                         v[0][0] = a;
  82.                         v[1][0] = b;
  83.                         v[2][0] = c;
  84.                         v[3][0] = d;
  85.                         for (int i = 0; i < 4; i++)
  86.                         {
  87.                                 for (int j = 0; j < 4; j++)
  88.                                 {
  89.                                         record[i][j] = 0;
  90.                                 }
  91.                         }
  92.                         record[0][0] = a;
  93.                         record[1][1] = b;
  94.                         record[2][2] = c;
  95.                         record[3][3] = d;
  96.                         r[0] = 4;
  97.                         int y;
  98.                         while (t[0] == 0)
  99.                         {
  100.                                 y = r[0];
  101.                                 count++;
  102.                                 int z[1];
  103.                                 for (z[0] = s; z[0] < y; z[0]++)
  104.                                 {
  105.                                         if (record[z[0]][0] < v[0][0])
  106.                                         {
  107.                                                 for (int a = 0; a < 4; a++)
  108.                                                 {
  109.                                                         v[a][1] = record[z[0]][a];
  110.                                                 }
  111.                                                 fill(v, 0);
  112.                                                 check(v, record, r, T, z, count, t);
  113.                                         }
  114.  
  115.                                         if (record[z[0]][0] > 0)
  116.                                         {
  117.                                                 if (z[0] < y)
  118.                                                 {
  119.                                                         for (int a = 0; a < 4; a++)
  120.                                                         {
  121.                                                                 v[a][1] = record[z[0]][a];
  122.                                                         }
  123.                                                         pour(v, 0, 1);
  124.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  125.                                                         {}
  126.                                                         else
  127.                                                         {
  128.                                                                 check(v, record, r, T, z, count, t);
  129.                                                         }
  130.                                                 }
  131.  
  132.                                                 if (z[0] < y)
  133.                                                 {
  134.                                                         for (int a = 0; a < 4; a++)
  135.                                                         {
  136.                                                                 v[a][1] = record[z[0]][a];
  137.                                                         }
  138.                                                         pour(v, 0, 2);
  139.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  140.                                                         {}
  141.                                                         else
  142.                                                         {
  143.                                                                 check(v, record, r, T, z, count, t);
  144.                                                         }
  145.                                                 }
  146.  
  147.                                                 if (z[0] < y)
  148.                                                 {
  149.                                                         for (int a = 0; a < 4; a++)
  150.                                                         {
  151.                                                                 v[a][1] = record[z[0]][a];
  152.                                                         }
  153.                                                         pour(v, 0, 3);
  154.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  155.                                                         {}
  156.                                                         else
  157.                                                         {
  158.                                                                 check(v, record, r, T, z, count, t);
  159.                                                         }
  160.                                                 }
  161.  
  162.                                                 if (z[0] < y)
  163.                                                 {
  164.                                                         for (int a = 0; a < 4; a++)
  165.                                                         {
  166.                                                                 v[a][1] = record[z[0]][a];
  167.                                                         }
  168.                                                         empty(v, 0);
  169.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  170.                                                         {}
  171.                                                         else
  172.                                                         {
  173.                                                                 check(v, record, r, T, z, count, t);
  174.                                                         }
  175.                                                 }
  176.                                         }
  177.  
  178.                                         if (z[0] < y && record[z[0]][1] < v[1][0])
  179.                                         {
  180.                                                 for (int a = 0; a < 4; a++)
  181.                                                 {
  182.                                                         v[a][1] = record[z[0]][a];
  183.                                                 }
  184.                                                 fill(v, 1);
  185.                                                 check(v, record, r, T, z, count, t);
  186.                                         }
  187.  
  188.                                         if (record[z[0]][1] > 0)
  189.                                         {
  190.                                                 if (z[0] < y)
  191.                                                 {
  192.                                                         for (int a = 0; a < 4; a++)
  193.                                                         {
  194.                                                                 v[a][1] = record[z[0]][a];
  195.                                                                 }
  196.                                                         pour(v, 1, 0);
  197.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  198.                                                         {}
  199.                                                 else
  200.                                                         {
  201.                                                                 check(v, record, r, T, z, count, t);
  202.                                                         }
  203.                                                 }
  204.  
  205.                                                 if (z[0] < y)
  206.                                                 {
  207.                                                         for (int a = 0; a < 4; a++)
  208.                                                         {
  209.                                                                 v[a][1] = record[z[0]][a];
  210.                                                         }
  211.                                                         pour(v, 1, 2);
  212.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  213.                                                         {}
  214.                                                         else
  215.                                                         {
  216.                                                                 check(v, record, r, T, z, count, t);
  217.                                                         }
  218.                                                 }
  219.  
  220.                                                 if (z[0] < y)
  221.                                                 {
  222.                                                         for (int a = 0; a < 4; a++)
  223.                                                         {
  224.                                                                 v[a][1] = record[z[0]][a];
  225.                                                         }
  226.                                                         pour(v, 1, 3);
  227.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  228.                                                         {}
  229.                                                         else
  230.                                                         {
  231.                                                                 check(v, record, r, T, z, count, t);
  232.                                                         }
  233.                                                 }
  234.  
  235.                                                 if (z[0] < y)
  236.                                                 {
  237.                                                         for (int a = 0; a < 4; a++)
  238.                                                         {
  239.                                                                 v[a][1] = record[z[0]][a];
  240.                                                         }
  241.                                                         empty(v, 1);
  242.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  243.                                                         {}
  244.                                                         else
  245.                                                         {
  246.                                                                 check(v, record, r, T, z, count, t);
  247.                                                         }
  248.                                                 }
  249.                                         }
  250.  
  251.                                         if (z[0] < y && record[z[0]][2] < v[2][0])
  252.                                         {
  253.                                                 for (int a = 0; a < 4; a++)
  254.                                                 {
  255.                                                         v[a][1] = record[z[0]][a];
  256.                                                 }
  257.                                                 fill(v, 2);
  258.                                                 check(v, record, r, T, z, count, t);
  259.                                         }
  260.  
  261.                                         if (record[z[0]][2] > 0)
  262.                                         {
  263.                                                 if (z[0] < y)
  264.                                                 {
  265.                                                         for (int a = 0; a < 4; a++)
  266.                                                         {
  267.                                                                 v[a][1] = record[z[0]][a];
  268.                                                         }
  269.                                                         pour(v, 2, 0);
  270.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  271.                                                         {}
  272.                                                         else
  273.                                                         {
  274.                                                                         check(v, record, r, T, z, count, t);
  275.                                                         }
  276.                                                 }
  277.  
  278.                                                 if (z[0] < y)
  279.                                                 {
  280.                                                         for (int a = 0; a < 4; a++)
  281.                                                         {
  282.                                                                 v[a][1] = record[z[0]][a];
  283.                                                         }
  284.                                                         pour(v, 2, 1);
  285.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  286.                                                         {}
  287.                                                         else
  288.                                                         {
  289.                                                                 check(v, record, r, T, z, count, t);
  290.                                                         }
  291.                                                 }
  292.  
  293.                                                 if (z[0] < y)
  294.                                                 {
  295.                                                         for (int a = 0; a < 4; a++)
  296.                                                         {
  297.                                                                 v[a][1] = record[z[0]][a];
  298.                                                         }
  299.                                                         pour(v, 2, 3);
  300.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  301.                                                         {}
  302.                                                         else
  303.                                                         {
  304.                                                                 check(v, record, r, T, z, count, t);
  305.                                                         }
  306.                                                 }
  307.  
  308.                                                 if (z[0] < y)
  309.                                                 {
  310.                                                         for (int a = 0; a < 4; a++)
  311.                                                         {
  312.                                                                 v[a][1] = record[z[0]][a];
  313.                                                         }
  314.                                                         empty(v, 2);
  315.                                                         check(v, record, r, T, z, count, t);
  316.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  317.                                                         {}
  318.                                                         else
  319.                                                         {
  320.                                                                 check(v, record, r, T, z, count, t);
  321.                                                         }
  322.                                                 }
  323.                                         }
  324.  
  325.                                         if (z[0] < y && record[z[0]][3] < v[3][0])
  326.                                         {
  327.                                                 for (int a = 0; a < 4; a++)
  328.                                                 {
  329.                                                         v[a][1] = record[z[0]][a];
  330.                                                 }
  331.                                                 fill(v, 3);
  332.                                                 check(v, record, r, T, z, count, t);
  333.                                         }
  334.  
  335.                                                 if (z[0] < y && record[z[0]][3] > 0)
  336.                                                 {
  337.                                                         for (int a = 0; a < 4; a++)
  338.                                                         {
  339.                                                                 v[a][1] = record[z[0]][a];
  340.                                                         }
  341.                                                         pour(v, 3, 0);
  342.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  343.                                                         {}
  344.                                                         else
  345.                                                         {
  346.                                                                 check(v, record, r, T, z, count, t);
  347.                                                         }
  348.                                                 }
  349.  
  350.                                                 if (z[0] < y && record[z[0]][3] > 0)
  351.                                                 {
  352.                                                         for (int a = 0; a < 4; a++)
  353.                                                         {
  354.                                                                 v[a][1] = record[z[0]][a];
  355.                                                         }
  356.                                                         pour(v, 3, 1);
  357.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  358.                                                         {}
  359.                                                         else
  360.                                                         {
  361.                                                                 check(v, record, r, T, z, count, t);
  362.                                                         }
  363.                                                 }
  364.  
  365.                                                 if (z[0] < y && record[z[0]][3] > 0)
  366.                                                 {
  367.                                                         for (int a = 0; a < 4; a++)
  368.                                                         {
  369.                                                                 v[a][1] = record[z[0]][a];
  370.                                                         }
  371.                                                         pour(v, 3, 2);
  372.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  373.                                                         {}
  374.                                                         else
  375.                                                         {
  376.                                                                 check(v, record, r, T, z, count, t);
  377.                                                         }
  378.                                                 }
  379.  
  380.                                                 if (z[0] < y && record[z[0]][3] > 0)
  381.                                                 {
  382.                                                         for (int a = 0; a < 4; a++)
  383.                                                         {
  384.                                                                 v[a][1] = record[z[0]][a];
  385.                                                         }
  386.                                                         empty(v, 3);
  387.                                                         if (v[0][1] == 0 && v[1][1] == 0 && v[2][1] == 0 && v[3][1] == 0)
  388.                                                         {}
  389.                                                         else
  390.                                                         {
  391.                                                                 check(v, record, r, T, z, count, t);
  392.                                                         }
  393.                                                 }
  394.                                 }
  395.                                 if (y == r[0])
  396.                                 {
  397.                                         printf("-1\n");
  398.                                         t[0] = 1;
  399.                                 }
  400.                                 s = y;
  401.                         }
  402.                 }
  403.         }
  404.         return 0;
  405. }
Parsed in 0.053 seconds