NYOJ 204 Coin Test

#include<stdio.h>
#include<string.h>
int gcd(int a,int b)//求a,b的最大公约数
{
  if(b==0)
    return a;
  else
    return gcd(b,a%b);
}
char str[700000];
int main()
{
  int n,i,t,countu=0,len;
  scanf("%d",&n);
  scanf("%s",str);
  len=strlen(str);
  for(i=0;i<len;i++)
  {
    if(str[i]=='U')
    countu++;
    if(str[i]=='S')
    {
      printf("Bingo\n");
      return 0;
    }
  }
  if(countu==0)//概率为0
  {
    printf("0\n");
    return 0;
  }
  if(countu==len)//概率为1
  {
    printf("1\n");
    return 0;
  }
  t=gcd(countu,len);
  printf("%d/%d",countu/t,len/t);//化简
}

/* 翻译

我们都知道,如果你扔一枚硬币并让它掉在桌子上,通常有三种结果。是的,相信我的话吧,它可能是正面朝上,背面朝上,亦或竖立起来。你不信吗,尽管试试吧。过去有些著名数学家研究过。他们一次次重复的扔硬币。但是jacmy是一个懒人,他忙着和女孩约会或玩游戏,没时间扔一枚硬币100000次。这是他的主意,去银行把成千上万的钱换成硬币只扔一次。这时要做的只是分别统计三种不同结果的硬币数。
他把桌子上每枚硬币给你看。请你用分数的形式告诉他硬币正面朝上的概率(当该概率在0.003和0.5之间),注意1/2,50/100,33/66是相等的,但只有1/2的形式才能通过!假如该概率小于0.003或大于0.5,则告诉他"Fail",当然如果你看到有一枚硬币竖立,输出"Bingo"即可。
输入
有两行作为输入。
第一行是一个整数N(1<N<65536),表示桌子上硬币的个数。
第二行是表示用来表示硬币朝向的N个字母,它们是"U","D","S". "U"表示正面朝上,"D"表示正面朝下,"S"表示竖立。
输出
若该实验成功,输出正面朝上的概率。若失败,则输出"Fail",如果有一个或多个"S",输出"Bingo"

*/

posted @ 2015-07-02 18:12  小松鼠。  阅读(170)  评论(0编辑  收藏  举报