ホームページ >ウェブフロントエンド >htmlチュートリアル >Codeforces ラウンド #278 (ディビジョン 2)B??キャンディボックス_html/css_WEB-ITnose

Codeforces ラウンド #278 (ディビジョン 2)B??キャンディボックス_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:53:371317ブラウズ

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

很麻烦の一题啊、必要分别考慮虑0,1,2,3,4個の情况

#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;}



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。