2011阿里巴巴程序设计公开赛 / 1009 Board Game Dice

来源:互联网 发布:病理图像分析软件 编辑:程序博客网 时间:2024/06/10 16:42

这题一看就是算概率,把题意弄懂后,顺利推出公式,x*1/(n/mx) = mx*x/n.

因为精度wa了一次= =,然后输出少了空格PE了一次,额...


代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define int64 long longint64 n, m, x;#define INF 21623int64 gcd(int64 a, int64 b){return b==0? a: gcd(b, a%b);}int64 getx(int64& mx){int64 ans = 1;int64 tn = n;int64 tm = m;while(tm<tn){//printf("%d*%d=%d\n", tm, tm*tm);if((int64)tm*tm>tn){tm*=m;ans+=1;}else if((int64)tm*tm<=tn){tm*=tm;ans*=2;}}mx = tm;return ans;}void solve(int64& a, int64& b){int64 mx;x = getx(mx);int64 d = gcd((int64)mx*x, (int64)n);a = (int64)mx*x/d;b = n/d;}int main(){int t;cin>>t;for(int i=1; i<=t; i++){cin>>n>>m;int64 a, b;solve(a,  b);cout<<"Case "<<i<<": "<<a<<"/"<<b<<endl;}}

原创粉丝点击