题目:hdoj 4790 Just Random

题意:给你两个闭区间【a,b】,【c,d】,分别从中等可能的跳出 x 和 y ,求(x+y)%p == m的概率

分析:

假如是【3,5】 【4,7】   p = 2 。 m = 1;

则全部的和

7 8
9 10

8 9
10 11

9 10
11 12

1 2
3 3 2
1

后面一行出现次数,能够发现能够分成三部分。第一部分递增的等差数列,第二部分值都相等,第三部分等差数列

然后用等差数列求和公式求和就ok

AC代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<stack>
#define MAXN 100005
using namespace std;
typedef long long LL;
LL p,m;
LL gcd(LL a,LL b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main()
{
//freopen("Input.txt","r",stdin);
int T;
scanf("%d",&T);
for(int cas = 1; cas<=T; cas++)
{
LL a,b,c,d,ans = 0;
scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&d,&p,&m);
if((b-a)>(d-c))
swap(a,c),swap(b,d);
long long t1 = (a+c)%p;
long long add = (m - t1 + p)%p;
long long cnt1 = (a+c + add-m)/p;
long long t2 = (b+c-1)%p;
long long sub = (t2 - m + p)%p;
long long cnt2 = (b+c-1-sub-m)/p;
//cout<<t2<<" "<<sub<<endl;
ans += (cnt2 - cnt1 + 1)*(1+add) + (cnt2 - cnt1 + 1)*(cnt2 - cnt1)/2 * p;
t1 = (b+c)%p;
add = (m - t1 + p)%p;
cnt1 = (b+c+add-m)/p;
t2 = (a+d)%p;
sub = (t2 - m + p)%p;
cnt2 = (a+d-sub-m)/p;
ans += (cnt2 - cnt1 + 1)*(b-a+1);
t1 = (a+d+1)%p;
add = (m - t1 + p)%p;
cnt1 = (a+d+1+add-m)/p;
t2 = (b+d)%p;
sub = (t2 - m + p)%p;
cnt2 = (b+d-sub-m)/p;
ans += (cnt2 - cnt1 + 1)*(1+sub) + (cnt2 - cnt1 + 1)*(cnt2 - cnt1)/2*p;
long long tot = (b-a+1)*(d-c+1);
long long GCD = gcd(ans,tot);
ans /= GCD;
tot /= GCD;
printf("Case #%d: %I64d/%I64d\n",cas,ans,tot);
}
return 0;
}

最新文章

  1. 微信JS-SDK坐标位置转换为百度地图坐标
  2. wangEditor——轻量级web富文本框
  3. 迄今最深入、最专业的Hololens评测结果,美国AR大咖艾迪&#183;奥夫曼现身说法
  4. A simple Snippet in ST2
  5. UrlRewriteFilter
  6. [Flex] Accordion系列 - Header图标的设置
  7. break 和 continue
  8. 在VS2012中采用C++中调用DLL中的函数 (4)
  9. BI的核心价值[转]
  10. Project Euler 82:Path sum: three ways 路径和:3个方向
  11. Core dotnet 命令大全
  12. 单片机C语言实现的采用DS18B20的温度检测装置
  13. runat=&quot;server&quot;
  14. 填个小坑,Vue不支持IE8及以下,跨域ajax不支持IE9
  15. 阿里巴巴Java开发手册思维导图
  16. 《高效能程序员的修炼》读后感 By Yong Zhang
  17. 把一个机器上1天内新增的文件用rsync传送到另外一台机器
  18. 结合JDK源码看设计模式——模板方法模式
  19. ArrayDataProvider数据分页
  20. 关于win10企业版在极域电子教室软件 v4.0 2015 豪华版的全屏控制下如何取得自由

热门文章

  1. 调试bug方法总结
  2. Http请求封装(对HttpClient类的进一步封装,使之调用更方便。另外,此类管理唯一的HttpClient对象,支持线程池调用,效率更高)
  3. nginx如何防止高负载造成服务器崩溃
  4. 如何用纯 CSS 创作一种按钮被瞄准的交互特效
  5. 分分钟钟学会Python - 函数(function)
  6. 如何根据实体动态生成sql语句
  7. kissy学习
  8. Linux如何查看CPU负载
  9. PTA 01-复杂度1 最大子列和问题 (20分)
  10. 最长链(codevs 1814)