http://acm.pku.edu.cn/JudgeOnline/problem?id=1017
Код:
#include <stdio.h> int a[7]; int max(int a, int b) { if (a > b) return a; else return b; } int min(int a, int b) { if (a > b) return b; else return a; } int main() { int i,j,k; int count; scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]); while (a[1] > 0 || a[2] > 0 || a[3] > 0 || a[4] > 0 || a[5] > 0 || a[6] > 0) { count = 0; for (k = 6; k >= 1; k--) { if (!a[k]) continue; if (k == 6) { count += a[k]; continue; } else if (k == 5) { count += a[k]; j = min(a[k]*11,a[1]); a[1] -= j; continue; } else if (k == 4) { count += a[k]; j = min(a[k]*5,a[2]); a[2] -= j; if (!a[2]) { j = a[k]*5 - j; i = min(j*4,a[1]); a[1] -= i; } continue; } else if ( k == 3) { count += a[k] / 4; j = a[k] % 4; if ( j == 1) { i = min(5,a[2]); a[2] -= i; a[1] -= min(27 - 4 * i,a[1]); count++; } else if (j == 2) { i = min(3,a[2]); a[2] -= i; a[1] -= min(18 - 4 * i,a[1]); count++; } else if (j == 3) { i = min(1,a[2]); a[2] -= i; a[1] -= min(9 - 4 * i,a[1]); count++; } continue; } else if ( k == 2) { count += a[k] / 9; j = a[k] % 9; if (j) { a[1] -= min(36 - 4 * j,a[1]); count++; } continue; } else { count += a[k] / 36; j = a[k] % 36; if (j) count++; continue; } } printf("%d\n",count); scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6]); } return 0; }