足球比賽(d)題解

原文鏈接
記得給原文留贊,轉載的也留一個吧!
這次比賽沒正解、沒分數的時候,老賀作死的來了一篇博客(對不起,DaLao別噴……)大家持不同意見的,可以在留言區討論……
題目:2022 世界盃馬上就要開始了,經過一番激烈角逐,全球 32 支球隊獲得了出線資格。世 界杯的比賽分爲兩個階段,分別爲小組賽階段和淘汰賽階段,在小組賽階段 32 支球隊將分 成 8 個小組,每個小組 4 支球隊進行循環比賽,即每兩支球隊比賽一次,每支球隊會進行 3 場比賽,勝得 3 分,平得 1 分,輸得 0 分。陶陶和藍藍都是足球迷,藍藍預測了幾次 2022 世界盃小組賽各個隊伍的得分,陶陶想知道這些得分情況是否可能出現?
輸入格式第一行一個正整數 T,表示有 T 組數據。 第二行到第 T+1 行,每行 4 個用空格隔開的整數,表示一個小組內的 4 支球隊的得分。 輸出格式T 行,如果該組數據可能出現則輸出“YES”,否則輸出“NO”。注意引號不用輸出。
樣例輸入 4
9 2 2 2
3 6 1 7
8 2 3 4
3 3 3 3
樣例輸出
YES
YES
NO
YES

解題思路:這道題開始一看好像一道數學題啊……不管了就按數學題來做!他是每次輸入一種四隊比分情況,讓我們做判斷。那麼,數據又不大。暴力枚舉可不可以呢?
我的答案是——可以的。
所以,就有了下面這個一層層相似度極高的程序。我們可以枚舉6場比賽的結果(這個數學問題不用講了吧……),每次有三種情況,對應着各自的比分。可以直接把所有的情況求出來(不多不多3^6),最後邊輸入數據邊判斷就好啦!
程序(珍愛生命,遠離抄襲):

#include<cstdio>
using namespace std;
bool f[10][10][10][10];
int n,q1,q2,q3,q4;
void putin()
{
	int t1,t2,t3,t4;
	for(int a1=1;a1<=3;++a1)
		for(int a2=1;a2<=3;++a2)
			for(int a3=1;a3<=3;++a3)
				for(int a4=1;a4<=3;++a4)
					for(int a5=1;a5<=3;++a5)
						for(int a6=1;a6<=3;++a6)
						{
							t1=t2=t3=t4=0;
							if(a1==1) t1+=3;
							if(a1==2) t1++,t2++;
							if(a1==3) t2+=3;
							if(a2==1) t1+=3;
							if(a2==2) t1++,t3++;
							if(a2==3) t3+=3;
							if(a3==1) t1+=3;
							if(a3==2) t1++,t4++;
							if(a3==3) t4+=3;
							if(a4==1) t2+=3;
							if(a4==2) t2++,t3++;
							if(a4==3) t3+=3;
							if(a5==1) t2+=3;
							if(a5==2) t2++,t4++;
							if(a5==3) t4+=3;
							if(a6==1) t3+=3;
							if(a6==2) t3++,t4++;
							if(a6==3) t4+=3;
							f[t1][t2][t3][t4]=1; 
						}
	scanf("%d",&n);
}
int main()
{
	freopen("d.in","r",stdin);
	freopen("d.out","w",stdout);
	putin();
	for(int i=1;i<=n;++i)
	{
		scanf("%d%d%d%d",&q1,&q2,&q3,&q4);
		if(f[q1][q2][q3][q4]==true)
			printf("YES");
		else
			printf("NO");
	}
	return 0;
}

直接上頭有沒有?這道題現在分數未知(至少老賀自己出了一個刁鑽的樣例都對了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章