#include<bits/stdc++.h> using namespace std; int check (int A, int B, int C, int A1, int B1, int C1, int i) { int odp = 10; if(i<=A) { /* wlewanie pojedyncze */ if(A1+B1 == i) { odp = min(odp, 1); } if(A1+C1 == i) { odp = min(odp, 1); } if(A1+B1+C1 == i) { odp = min(odp, 2); } /* jedna do drugiej i reszta do trzeciej*/ int brakb1 = B - B1; int cowC = max(0, C1 - brakb1); if(A1 + cowC == i) { odp = min(odp, 2); } int brakc1 = C - C1; int cowB = max(0, B1 - brakc1); if(A1 + cowB == i) { odp = min(odp, 2); } /*wylewanie z A*/ int cowAc = max(0, A1 - brakc1); if(cowAc == i) { odp = min(odp, 1); } if(cowAc + B1 == i) { odp = min(odp, 2); } int cowAb = max(0, A1 - brakb1); if(cowAb + C1 == i) { odp = min(odp, 2); } if(cowAb == i) { odp = min(odp, 1); } if(A1 - brakb1 == i) { odp = min(odp, 1); } if(A1 - brakc1 == i) { odp = min(odp, 1); } if(A1 - brakc1 - brakb1 == i) { odp = min(odp, 2); } } return odp; } int main() { int A, B, C; scanf("%d%d%d", &A, &B, &C); int A1, B1, C1; scanf("%d%d%d", &A1, &B1, &C1); for(int i=0; i<=C; i++) { if(A1+B1+C1<i) { printf("-1 "); } else { int odp=10; if(A1==i||B1==i||C1==i) printf("0 "); else { odp = min(odp, check(A, B, C, A1, B1, C1, i)); odp = min(odp, check(B, C, A, B1, C1, A1, i)); odp = min(odp, check(C, A, B, C1, A1, B1, i)); if(odp==10) printf("-1 "); else printf("%d ", odp); } } } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include<bits/stdc++.h> using namespace std; int check (int A, int B, int C, int A1, int B1, int C1, int i) { int odp = 10; if(i<=A) { /* wlewanie pojedyncze */ if(A1+B1 == i) { odp = min(odp, 1); } if(A1+C1 == i) { odp = min(odp, 1); } if(A1+B1+C1 == i) { odp = min(odp, 2); } /* jedna do drugiej i reszta do trzeciej*/ int brakb1 = B - B1; int cowC = max(0, C1 - brakb1); if(A1 + cowC == i) { odp = min(odp, 2); } int brakc1 = C - C1; int cowB = max(0, B1 - brakc1); if(A1 + cowB == i) { odp = min(odp, 2); } /*wylewanie z A*/ int cowAc = max(0, A1 - brakc1); if(cowAc == i) { odp = min(odp, 1); } if(cowAc + B1 == i) { odp = min(odp, 2); } int cowAb = max(0, A1 - brakb1); if(cowAb + C1 == i) { odp = min(odp, 2); } if(cowAb == i) { odp = min(odp, 1); } if(A1 - brakb1 == i) { odp = min(odp, 1); } if(A1 - brakc1 == i) { odp = min(odp, 1); } if(A1 - brakc1 - brakb1 == i) { odp = min(odp, 2); } } return odp; } int main() { int A, B, C; scanf("%d%d%d", &A, &B, &C); int A1, B1, C1; scanf("%d%d%d", &A1, &B1, &C1); for(int i=0; i<=C; i++) { if(A1+B1+C1<i) { printf("-1 "); } else { int odp=10; if(A1==i||B1==i||C1==i) printf("0 "); else { odp = min(odp, check(A, B, C, A1, B1, C1, i)); odp = min(odp, check(B, C, A, B1, C1, A1, i)); odp = min(odp, check(C, A, B, C1, A1, B1, i)); if(odp==10) printf("-1 "); else printf("%d ", odp); } } } return 0; } |