exgcd——齊神與心美的遊戲II

exgcd——齊神與心美的遊戲II

題目描述:

某一天齊木楠雄和照橋心美又在一起玩找數字的遊戲,遊戲規則是這樣的,桌子上有n個的卡片,每一張卡片上都有一個數字(劃重點,這裏沒有說明每個數字必須獨一無二),心美從中選擇三次(可以重複選擇同一張卡片),然後得到一個數爲三張卡片上數字之和,如果卡片上的數字之和恰好爲k,那麼心美獲勝,否則齊神獲勝。如果心美獲勝了,齊神只能乖乖的聽從心美的要求說出"哦呼"了。心美從桌上隨機選了三張牌(每一張卡片被心美照顧的概率相同)。燃堂想要知道齊木說出哦呼的概率有多大,因爲如果齊神說了"哦呼",那麼可能今天就不能和哥們一起喫拉麪了。

輸入描述:

對於每一個案例,我們第一行包括兩個整數n,k(1<=n<=100,k<=6e5),表示有n個數字,目標和爲k。第二行輸入n個整數(c1 c2…cn),(1<=ci<=2e5),表示每一張卡片上的數字。

輸出描述:

輸出一個形爲a/b的最簡分數,表示齊神說出"哦呼"的機率的概率(如果概率爲0,輸出0/1)。

示例:

輸入

5 9
1 2 3 4 5

輸出

19/125

分析

直接三重循環遍歷即可。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
	if(b==0)
		return a;
	else
		return gcd(b,a%b);
}
int main()
{
	ll n,k;
	ll a[105];
	cin>>n>>k;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	ll sum=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			for(int t=0;t<n;t++){
				if(a[i]+a[j]+a[t]==k){
					sum++;
				}
			}
		}
	}
	if(sum==0){
		printf("0/1\n");
	}
	else{
		n=n*n*n;
		ll m=gcd(n,sum);
		printf("%lld/%lld\n",sum/m,n/m);
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章