1. 程式人生 > >杭電多校第九場

杭電多校第九場

k題題意

一天你去打羽毛球  遇見a,b,c,d四種人。

a是白條哥啥都沒有,b只有拍子,c只有球,d有一個拍子一個球。

pop(a+b+c+d)=n  pop是人數 

你現在想打羽毛球,從這四種人中任意挑人打比賽,要求至少有兩個拍子一個球,可以任意個人。。。

問在所有情況中 有多少種情況我打不了羽毛球。。。。

思路

第一種 每種人打球的情況是2^x.

所以若只考慮a和b 則有2^(a+b)中可能

第二種 考慮上c了 就是2^(a+c)*(b+1) 這裡為什麼是乘以b+1呢?

b種人只能去一個人或者沒有b去 因為只能有一個拍子或者沒有拍子。

但是這樣子會和第一種重了,就是c沒人去,b去一個或者不去 所以第二種要減去2^a*(b+1)

第三種 考慮上d了,就是2^c*d

這個題要用快速冪

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef double db;
const int maxn = 1001, inf = 0x3f3f3f3f;
const double pi = acos(-1.0);
const ll mod = 998244353;

ll quick(ll a, ll b)
{
	ll ans = 1;
	a = a % mod;
	while (b != 0)
	{
		if (b & 1) ans = (ans * a) % mod;
		b >>= 1;
		a = (a*a) % mod;
	}
	return ans;
}

int main()
{
	int t;
	ll a, b, c, d;
	scanf("%d", &t);
	while (t--)
	{
		cin >> a >> b >> c >> d;
		ll ans = quick(2, a)*quick(2, b) % mod;
		ans = (ans + ((quick(2, a + c) - quick(2, a) +mod) % mod*(1 + b)) % mod) % mod;
		ans = (ans + (quick(2, a + c)*d%mod)) % mod;
		printf("%lld\n", ans);
	}
	return 0;
}

題意:A分別有a1,b1,c1個剪刀,石頭,布,B分別有a2,b2,c2個剪刀,石頭,布,B勝A獲得一分,平手不得不失,B輸A失去一分,求B得到最大分數的期望

分析:B要獲得最大分數,則在A出剪刀的時候B一定要出石頭,此時B可以得到勝A的分數但是同時會失去A可能出布失去的分數

  則A出剪刀時B得分的期望是:b2*a1/(a1+b1+c1) - b2*c1/(a1+b1+c1) 依次類推

  所以B獲勝的期望是:(a1*b2-b2*c1+b1*c2-a1*c2+a2*c1-a2*b)/(a1+b1+c1)

CODE

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll a1, b1, c1, a2, b2, c2;
ll gcd(ll a, ll b)
{
	if (b == 0)return a;
	return gcd(b, a%b);
}

int main()
{
	ios::sync_with_stdio(0);
	int t;
	cin >> t;
	while (t--)
	{
		cin >> a1 >> b1 >> c1;
		cin >> a2 >> b2 >> c2;
		ll getup = (a1*b2 - b2 * c1 + b1 * c2 - a1 * c2 + a2 * c1 - a2 * b1);
		ll getdown = a1 + b1 + c1;
		if (getup%getdown == 0)
			cout << getup / getdown << endl;
		else
		{
			if (getup < 0) {  //注意求最大公約數時數為負數的情況
				cout << getup / gcd(-getup, getdown) << "/" << getdown / gcd(-getup, getdown) << endl;
			}
			else {
				cout << getup / gcd(getup, getdown) << "/" << getdown / gcd(getup, getdown) << endl;
			}
		}
	}
}