ホームページ >ウェブフロントエンド >htmlチュートリアル >Codeforces ラウンド #278 (ディビジョン 2)B??キャンディボックス_html/css_WEB-ITnose
B. キャンディボックス
テストごとの制限時間
1 秒
テストごとのメモリ制限
256 メガバイト
入力
標準入力
出力
標準出力
ありサイバーランドでは、キャンディーの入った箱を 4 箱家に保管しておくという古い伝統があります。算術平均、中央値、範囲がすべて等しい場合、キャンディーの数は特別になります。定義により、集合 {x1,?x2,?x3,?x4} (x1?≤?x2?≤?x3?≤?x4) の算術平均は 、中央値は 、範囲は x4?-?x1 です。算術平均と中央値は整数である必要はありません。これら 3 つの数字が同じである場合、ボックスは「デバッグ フィールド」を作成し、そのフィールド内のコードにはバグがないことはよく知られています。
たとえば、1,?1,?3,?3 は次の例です。平均値、中央値、範囲がすべて 2 に等しいため、条件を満たす 4 つの数値です。
ジェフはキャンディーの入った特別な箱を 4 つ持っています。ところが、何か悪いことが起こったのです!いくつかのボックスは紛失した可能性があり、現在は n (0?≤?n?≤?4) 個のボックスのみが残っています。 i 番目の残りのボックスには AI キャンディーが含まれています。
ここで、ジェフは知りたいと考えています: 上記の条件 (平均値、中央値、範囲) を満たす、欠落している 4?-?n 個のボックスのキャンディーの数を見つける方法はありますか?は等しい)?
入力
入力の最初の行には、整数 n (0?≤?n?≤?4) のみが含まれます。
次の n 行には、整数 ai が含まれます。 i 番目のボックス (1?≤?ai?≤?500)。
出力
最初の出力行で、解決策が存在する場合は「YES」を出力し、解決策が存在しない場合は「NO」を出力します。
解が存在する場合は、さらに 4?-?n 行を出力する必要があります。各行には、欠落しているボックス内のキャンディーの数を示す整数 b が含まれます。
すべての数値 b は、不等式 1?≤?b?≤ を満たさなければなりません。 ?106。正の整数の解が存在する場合、条件を満たす b を常に見つけることができることが保証されます。複数の回答がある場合は、そのいずれかを出力することができます。
与えられた数値 ai は、入力内で任意の順序で従うことができますが、非減少である必要はありません。
ai は、元のセット内の任意の位置に立っていた可能性があります。最初の最下位 n 番目の位置では必要ありません。
サンプル テスト
入力
211
出力
YES33
入力
3111
出力
NO
入力
41223
出力
YES
#include <map>#include <set>#include <list>#include <queue>#include <stack>#include <vector>#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int a[5];int main(){ int n; while (~scanf("%d", &n)) { for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); } sort(a + 1, a + n + 1); if (n == 4) { double u = (a[1] + a[2] + a[3] + a[4]) * 1.0; u /= 4; double v = (a[4] - a[1]); double w = (a[2] + a[3]) * 1.0 / 2; if (u != v || u != w || v != w) { printf("NO\n"); } else { printf("YES\n"); } continue; } else if(n == 3) { int u = (a[2] + a[3] - a[1]); bool flag = false; bool flag2 = false; bool flag3 = false; bool flag4 = false; int p = u + a[1] + a[2] + a[3]; int q = u - a[1]; int r = a[2] + a[3]; if (p % 4 || r % 2) { flag = true; } else { p /= 4; r /= 2; } if (!flag && (p != q || p != r || q != r)) { flag = true; } if (!flag && u >= 1 && u <= 1000000 && u >= a[3]) { printf("YES\n"); printf("%d\n", u); continue; } u = a[1] + a[2] - a[3]; p = u + a[1] + a[2] + a[3]; q = a[3] - a[1]; r = (u + a[2]); if (p % 4 || r % 2) { flag2 = true; } else { p /= 4; r /= 2; } if (!flag2 && (p != q || p != r || q != r)) { flag2 = true; } if (!flag2 && u >= 1 && u <= 1000000 && u >= a[2] && u <= a[3]) { printf("YES\n"); printf("%d\n", u); continue; } u = a[1] + a[3] - a[2]; p = u + a[1] + a[2] + a[3]; q = a[3] - a[1]; r = (u + a[2]); if (p % 4 || r % 2) { flag3 = true; } else { p /= 4; r /= 2; } if (!flag3 && (p != q || p != r || q != r)) { flag3 = true; } if (!flag3 && u >= 1 && u <= 1000000 && u >= a[1] && u <= a[2]) { printf("YES\n"); printf("%d\n", u); continue; } u = a[1] + a[2] - a[3]; p = u + a[1] + a[2] + a[3]; q = a[3] - u; r = a[1] + a[2]; if (p % 4 || r % 2) { flag4 = true; } else { p /= 4; r /= 2; } if (!flag4 && (p != q || p != r || q != r)) { flag4 = true; } if (!flag4 && u >= 1 && u <= 1000000 && u <= a[1]) { printf("YES\n"); printf("%d\n", u); continue; } if (flag && flag2 &&flag3 && flag4) { printf("NO\n"); } } else if(n == 1) { int x4 = 3 * a[1]; int x23 = x4 + a[1]; int x2, x3; x2 = x3 = x23 / 2; if (a[1] <= x2 && x2 <= x3 && x3 <= x4) { printf("YES\n"); printf("%d\n%d\n%d\n", x2, x3, x4); } else { printf("NO\n"); } } else if ( n == 2) { int x1 = a[1], x2 = a[2]; int x4 = 3 * a[1]; int x3 = 4 * x1 - x2; if (x1 <= x2 && x2 <= x3 && x3 <= x4) { printf("YES\n"); printf("%d\n%d\n", x3, x4); continue; } x1 = a[1]; x3 = a[2]; x4 = 3 * a[1]; x2 = 4 * x1 - x3; if (x1 <= x2 && x2 <= x3 && x3 <= x4) { printf("YES\n"); printf("%d\n%d\n", x2, x4); continue; } bool flag = false; x2 = a[1]; x3 = a[2]; x1 = x2 + x3; if (x1 % 4) { flag = true; } else { x1 /= 4; x4 = 3 * x1; if (x1 <= x2 && x2 <= x3 && x3 <= x4) { printf("YES\n"); printf("%d\n%d\n", x1, x4); continue; } else { flag = true; } } bool flag2 = false; x2 = a[1]; x4 = a[2]; x1 = x4; if (x1 % 3) { flag2 = true; } else { x3 = x1 + x4 - x2; if (x1 <= x2 && x2 <= x3 && x3 <= x4) { printf("YES\n"); printf("%d\n%d\n", x1, x3); continue; } else { flag2 = true; } } bool flag3 = false; x3 = a[1]; x4 = a[2]; x1 = x4; x2 = x1 + x4 - x3; if (x1 % 3) { flag3 = true; } else { if (x1 <= x2 && x2 <= x3 && x3 <= x4) { printf("YES\n"); printf("%d\n%d\n", x1, x2); continue; } else { flag3 = true; } } if (flag && flag2 && flag3) { printf("NO\n"); } } else { printf("YES\n"); printf("1\n1\n3\n3\n"); } } return 0;}