HDU4790_Just Random
这个题目我只能说我一看就知道是这么做的,但是由于实现能力略水,Wa了3发。
题意为给你两个区间[a,b]和[c,d],两个区间分别任取一个数,现在要你求出这个数模p的值为m的概率有多大。
其实是这么做的,我们需要统计总共有多少种组合情况然后等于就知道分母和分子了。
但是怎么求种类数呢 ???
首先我们定义一个函数count(x,y),表示从0-x,0-y随机取两数满足情况的种类数。
那么最后我们要求的答案ans=count(a,b)-count(a-1,b)-count(a,b-1)+count(a-1,b-1)。
这是容斥原理,到这里问题就转化为了求函数值呢。
但是我们的根本的问题还是没有解决。到底怎么求呢?
我们可以这样考虑,给一个数A,现在问你x%p=m(x不大于A)的种类数有多少?
显然,如果A%p>=m,答案就是A/p+1,如果A%p<m,答案就是A/p。
这里自己算一算就知道了。。。
然后我们等于是由二维优化到了一维,但是还是不够,还有继续优化。
我们知道取模具有周期性,所以我们可以保证最后我们要求其中一个的范围的不会超过p。
假设我们从0开始循环枚举第一个i,那么每次i没增加1,其实就是最终的种类数相当于m减1,如果我们看成p个数对应的函数值,那么我们等于是把每一个函数值右移了一位。
如果你理解了上面,那么恭喜你,可以A掉这个题目了。
具体来说就是这样的,首先不超过A%p的函数值都为A/p+1,超过的部分为A/p。也就是说,只有两种不同的函数值,而且是连续的。
接下来我们等于是每次移动一位,然后求某一固定位置的函数值,这样我们发现移动若干位后的函数值才会变化一次,而且总共最多变化两次(因为循环部分的可以直接计算了),所以找出突变点做一次乘法就可以出答案了。
其实函数移动就是求连续段的函数值啦。。。只是那样好理解一定。
手滑Wa了若干发。。。。OTL。代码也挺挫的,求见谅。
哦,对了,是循环移动。
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std; ll a,b,c,d,n,m,p,ans,t,cas=,G,sum; ll gcd(ll A,ll B) { return B==?A:gcd(B,A%B); } ll count(ll x,ll y)
{
if (x< || y<) return ;
ll tot=,flag=y%p,left=(x+)%p,cur=m,End=(cur-left++p)%p;
ll all=((y%p+)*(y/p+)+(p--y%p)*(y/p));
tot=((x+)/p)*all;
if (left==) return tot;
if (cur<End && End<=flag)
{
tot+=all-(End-cur-)*(y/p+);
return tot;
}
if (cur<End && cur>flag)
{
tot+=all-(End-cur-)*(y/p);
return tot;
}
if (cur<End)
{
tot+=(cur+)*(y/p+)+(p-End)*(y/p);
return tot;
}
if (cur>=End && End>flag)
{
tot+=(cur-End+)*(y/p);
return tot;
}
if (cur>=End && cur<=flag)
{
tot+=(cur-End+)*(y/p+);
return tot;
}
if (cur>End)
{
tot+=(cur-flag)*(y/p)+(flag-End+)*(y/p+);
return tot;
}
return tot;
} int main()
{
scanf("%I64d",&t);
while (t--)
{
scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&d,&p,&m);
ans=count(b,d)-count(a-,d)-count(b,c-)+count(a-,c-);
sum=(b-a+)*(d-c+);
if (ans==)
{
printf("Case #%I64d: 0/1\n",++cas);
continue;
}
G=gcd(ans,sum);
ans/=G,sum/=G;
printf("Case #%I64d: %I64d/%I64d\n",++cas,ans,sum);
}
return ;
}
HDU4790_Just Random的更多相关文章
- Chrome V8引擎系列随笔 (1):Math.Random()函数概览
先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...
- Math.random()
Math.random() 日期时间函数(需要用变量调用):var b = new Date(); //获取当前时间b.getTime() //获取时间戳b.getFullYear() //获取年份b ...
- .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数
.Net中我们通常使用Random类生成随机数,在一些场景下,我却发现Random生成的随机数并不可靠,在下面的例子中我们通过循环随机生成10个随机数: ; i < ; i++) { Rando ...
- 随机数(random)
需求 Random rd=new Random(); 需要十以内的随机数 (0---10) System.out.println((int)((rd.nextDouble()*100)/10)); ...
- python写红包的原理流程包含random,lambda其中的使用和见简单介绍
Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...
- [LeetCode] Random Pick Index 随机拾取序列
Given an array of integers with possible duplicates, randomly output the index of a given target num ...
- [LeetCode] Linked List Random Node 链表随机节点
Given a singly linked list, return a random node's value from the linked list. Each node must have t ...
- [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
A linked list is given such that each node contains an additional random pointer which could point t ...
- php对应js math.random
<?php function random($min = 0, $max = 1) { return $min + mt_rand()/mt_getrandmax()*($max-$mi ...
随机推荐
- 成都优步uber司机客户端下载-支持安卓、IOS系统、优步司机端Uberpartner
国外打车软件优步乘客端大家在手机应用商店里都可以下载到,但是优步司机的App却不好找下载地址:这就跟滴滴打车一样,滴滴的乘客端是滴滴打车,而司机端是滴滴专车,司机版本在应用商店里都找不到,原因不清楚. ...
- Android:制作聊天气泡点9图
步骤一:选择res下的一张图片,右击选择“Create 9-Patch File” 步骤二:确定点9图的名字,只能修改.9.png之前的信息 步骤三:在同目录下会生成刚才创建的点9图,双击打开进行编辑 ...
- 让div跟着鼠标移动
朋友求助帖 具体实现代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 转:后台管理UI的选择
注:文中缺少了ZUI和LAYUI两个. 目录 一.EasyUI 二.DWZ JUI 三.HUI 四.BUI 五.Ace Admin 六.Metronic 七.H+ UI 八.Admin LTE 九.I ...
- 前端 CDNJS 库及 Google Fonts、Ajax 和 Gravatar 国内加速服务
由于某些众所周知的原因,好多开源的 JS 库采用的国外 CDN 托管方式在国内访问速度不如人意.所以我们特意制作了这个公益项目,托管了 CDNJS 的所有开源 JS 库以及反代了 Google Fon ...
- NPOI读取Excel到集合对象
之前做过的项目中有个需要读取Excel文件内容的需求,因此使用NPOI实现,写下以下代码,这个只是一个代码段,还有很多地方需要优化,希望能对大家有所帮助 public static IList< ...
- 中国天气网 城市代码 sql语句
mysql的 下载地址:http://download.csdn.net/detail/songzhengdong82/6252651
- Unity Lighting - Choosing a Color Space 选择色彩空间(四)
Choosing a Color Space 选择色彩空间 In addition to selecting a rendering path, it’s important to choose ...
- SQL行列乾坤大挪移
“生活总是这样,有时候,你需要一个苹果,但别人却给了你一个梨.” 今天dalao邮件里需要添加一张每月累计长长的图,可是,拿到手上的SQL导出数据不符合我最爱的pyecharts的数据输入格式,头大. ...
- tendermint 跟tikv结合
import ( "fmt" "github.com/allegro/bigcache" "github.com/kooksee/usmint/cmn ...