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