HDU 4790 Just Random 数学
链接: pid=4790">http://acm.hdu.edu.cn/showproblem.php?pid=4790
意:从【a。b】中随机找出一个数字x,从【c。d】中随机找出一个数字y。给出p。m,假设(x+y)%p==m则算成功,问成功的概率是多少。
思路:【a。b】中连续p个数。【c,d】中连续p个数。用这2*p个数进行组合能找到p种的成功组合(详细不证),所以找到【a。b】中p循环的个数x1,【c,d】中p循环的个数y1,则它们组成的成功组合数为p*x1*y1。
然后是处理边界的问题,首先x或y处于边界的数的数量一定不超过p-1个,设分别有x2,y2个,这x2。y2个数一定能在相应的每一个循环中找到相应的成功组合。所以还要多出x2*y1+y2*x1个成功组合数。
最后还要在这x2,y2个数里找到互相相应的数。由于要求x2+y2 ≡ m(mod p),所以(m-x2) ≡ y2(mod p),然后找到它们重叠的部分就可以。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <cstdlib>
#include <queue>
#include <stack>
#include <vector>
#include <ctype.h>
#include <algorithm>
#include <string>
#include <set>
#define PI acos(-1.0)
#define maxn 10005
#define INF 0x7fffffff
#define eps 1e-8
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
int main()
{
int T;
scanf("%d",&T);
for(int ii=1; ii<=T; ii++)
{
LL a,b,c,d,p,m;
scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&d,&p,&m);
LL x=b-a+1,y=d-c+1;
LL xx=(b-a+1)/p;
LL yy=(d-c+1)/p;
LL xxx=x-xx*p;
LL yyy=y-yy*p;
LL t=xx*yy*p;
LL fm=x*y;
t+=xxx*yy;
t+=yyy*xx;
if(xxx!=0&&yyy!=0)
{
LL head=a%p;
LL tail=b%p;
LL head1=((m-tail)%p+p)%p;
LL tail1=((m-head)%p+p)%p;
LL head2=c%p;
LL tail2=d%p;
//cout<<head1<<" "<<tail1<<" "<<head2<<" "<<tail2<<endl;
if(tail1>=head1&&tail2>=head2)
t+=(max(0LL,(min(tail2,tail1)-max(head1,head2))+1));
else if(tail1>=head1&&tail2<head2)
{
if(tail1<=tail2)
t+=max(0LL,tail1-head1+1);
else if(tail1>tail2&&tail1<head2)
t+=max(0LL,tail2-head1+1);
else t+=max(0LL,tail1-max(head1,head2)+1)+max(0LL,tail2-head1+1);
}
else if(tail2>=head2&&tail1<head1)
{
if(tail2<=tail1)
t+=max(0LL,tail2-head2+1);
else if(tail2>tail1&&tail2<head1)
t+=max(0LL,tail1-head2+1);
else t+=max(0LL,tail2-max(head1,head2)+1)+max(0LL,tail1-head2+1);
}
else t+=(p-max(head1,head2)+min(tail1,tail2)+1+max(0LL,tail1-head2+1)+max(0LL,tail2-head1+1));
}
printf("Case #%d: ",ii);
if(t==0)
printf("0/1\n");
else
{
LL ttt=__gcd(t,fm);
printf("%I64d/%I64d\n",t/ttt,fm/ttt);
}
}
return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
HDU 4790 Just Random 数学的更多相关文章
- hdu 4790 Just Random (2013成都J题) 数学思路题 容斥
题意:在[a,b] [c,d] 之间,和模p等于m的对数 详见代码 #include <stdio.h> #include <algorithm> #include < ...
- hdu 4790 Just Random (思路+分类计算+数学)
Problem Description Coach Pang and Uncle Yang both love numbers. Every morning they play a game with ...
- HDU 4790 Just Random (2013成都J题)
Just Random Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 4790 Just Random 神奇的容斥原理
/** 大意: 给定[a,b],[c,d] 在这两个区间内分别取一个x,y 使得 (x+y)%p = m 思路:res = f(b,d) -f(b,c-1)-f(a-1,d)+f(a-1,c-1); ...
- hdu 4790 Just Random
思路:对于a<=x<=b,c<=y<=d,满足条件的结果为ans=f(b,d)-f(b,c-1)-f(a-1,d)+f(a-1,c-1). 而函数f(a,b)是计算0<= ...
- hdoj 4790 Just Random 【数学】
题目:hdoj 4790 Just Random 题意:给你两个闭区间[a,b],[c,d],分别从中等可能的跳出 x 和 y ,求(x+y)%p == m的概率 分析: 假如是[3,5] [4,7] ...
- HDU 4790:Just Random(容斥)
Just Random Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- Just Random HDU - 4790 思维题(打表找规律)分段求解
Coach Pang and Uncle Yang both love numbers. Every morning they play a game with number together. In ...
- hdu 4790 数学
/* 题意:给你二个区间[a,b]和[c,d] 分别从中选一个数x和y使的(x+y)%p=m; 可以这样来求,先求出(0->b和0->d区间段的值)-(区间0->a-1和0-> ...
随机推荐
- Android:解决client从server上获取数据乱码的方法
向server发送HTTP请求.接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity()," ...
- WPF的消息机制
前言 谈起“消息机制”这个词,我们都会想到Windows的消息机制,系统将键盘鼠标的行为包装成一个Windows Message,然后系统主动将这些Windows Message派发给特定的窗口,实际 ...
- 有空研究一下OwnerDraw和三种Windows风格CS_OWNDC和CS_PARENTDC和CS_CLASSDC
就在StdCtrls.pas, ExtCtrls.pas和Buttons.pas三个类里研究就够了,这是初步的搜索结果: ---------- 在打开的文档中查找 ---------- "G ...
- mysql高可用架构方案之二(keepalived+lvs+读写分离+负载均衡)
mysql主从复制与lvs+keepalived实现负载高可用 文件夹 1.前言 4 2.原理 4 2.1.概要介绍 4 2.2.工作原理 4 2.3.实际作用 4 3方 ...
- swift_将UIDatePicker到达的传播之间的时间差在数小时出现页面的事
今天,写swift demo当它来到了一个非常精彩的问题,我再次 present 使用页面出来 UIDatePicker 选择时间,然后再回到原来的主界面的时间,结果出现的问题:B页面的正常时间,传回 ...
- Delphi 10.1 柏林更新内容简译
新的 SDKTransform.exe 支持转换 Object-C 或 C++ 头文件到Delphi. 修改了对话框的接口,分成了同步和异步两种: http://blog.qdac.cc/?p=380 ...
- [Android学习笔记]枚举与int的转换
package com.example.enumdemo; import android.app.Activity; import android.os.Bundle; import android. ...
- jQuery为啥要提供一个load()方法?
上午的时候,找个闲暇事件整理之前整理的一些关于jQuery的东西,看到了一个之前做的jQuery的$(document).ready()与window.onload()方法的比較. 上面两个方法最重要 ...
- 【Access2007】将Excel表导入到Access2007在现有的表成
将Excel表导入到Access2007,你会发现邪恶Access2007这将帮助你自己主动创建表.您是否想插入完全没问你到一个现有的表. 然后,我们需要解决这个问题: 一.常的步骤先将Excel表导 ...
- 解决Andriod使用HttpURLConnection 失败问题
在Android的Activity中使用HttpURLConnection连接到服务端时抛出异常,Access denied.第一个想到是权限问题.然后就尝试将INTERNET权限加上:在Manife ...