bzoj2038[2009国家集训队]小Z的袜子(hose)

题意:

把N只袜子从1到N编号,每次求从编号为L到R的袜子中抽两只,有多大的概率抽到颜色相同的袜子。

题解:

不知道要用什么数据结构,但是可以用一个全局的数组保存每个颜色当前数量,使由区间[l,r]推出[l,r±1]的答案和[l±1,r]的复杂度为O(1),对这种问题,可以用复杂度为O(nsqrt(n))的莫队算法解决。

莫队算法是一种离线算法,将询问按某种顺序排序,使得均摊复杂度为O(nsqrt(n)),那怎么排序呢?如果按左端点排序,那么r将有可能多次大幅度摆动,使复杂度退化成O(n^2),正解是对端点分块,让后按左端点所在块为第一关键字排序,右端点为第二关键字排序。这样子当两个询问l在同一块时,l只有可能移sqrt(n)次。l在同一块的多次询问q只能右移n次,l在不同块时r可能左移n次,但因为只有sqrt(n)块,所以需移n次的操作都只有sqrt(n)次,因此均摊复杂度是O(sqrt(n))。所有的均摊复杂度都是玄学……

因为中间结果没有强制转化成long long,wa了好几发,本弱太弱了!

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <cmath>
 5 #define ll long long
 6 #define inc(i,j,k) for(int i=j;i<=k;i++)
 7 using namespace std;
 8
 9 struct nd1{
10     int l,pl,r,id; ll ans;
11 };
12 bool cmp1(nd1 a,nd1 b){
13     if(a.pl!=b.pl)return a.pl<b.pl; if(a.r!=b.r)return a.r<b.r;
14     return a.l<b.l;
15 }
16 bool cmp2(nd1 a,nd1 b){
17     return a.id<b.id;
18 }
19 nd1 a1[100000];int col[100000],pos[100000],n,m,l,r;ll ans,s[100000];
20 inline void update(int x,int y){
21     ans-=(s[col[x]]*(s[col[x]]-1));s[col[x]]+=(ll)y;ans+=(s[col[x]]*(s[col[x]]-1));
22 }
23 ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}
24 int main(){
25     scanf("%d%d",&n,&m); inc(i,1,n)scanf("%d",&col[i]); int sz=(int)sqrt(n);
26     inc(i,1,n)pos[i]=(i-1)/sz+1;
27     inc(i,1,m){
28         int a,b;scanf("%d%d",&a,&b);a1[i]=(nd1){a,pos[a],b,i,0};
29     }
30     sort(a1+1,a1+1+m,cmp1); l=1; r=0; ans=0; memset(s,0,sizeof(s));
31     inc(i,1,m){
32         while(r<a1[i].r)update(r+1,1),r++;
33         while(l>a1[i].l)update(l-1,1),l--;
34         while(r>a1[i].r)update(r,-1),r--;
35         while(l<a1[i].l)update(l,-1),l++;
36         a1[i].ans=ans;
37     }
38     sort(a1+1,a1+1+m,cmp2);
39     inc(i,1,m){
40         if(a1[i].ans==0)printf("0/1\n");else{
41             ll a2=gcd(a1[i].ans,(ll)(a1[i].r-a1[i].l+1)*(a1[i].r-a1[i].l));
42             printf("%lld/%lld\n",a1[i].ans/a2,(ll)(a1[i].r-a1[i].l+1)*(a1[i].r-a1[i].l)/a2);
43         }
44     }
45     return 0;
46 }

20160405

转载于:https://www.cnblogs.com/YuanZiming/p/5693162.html

bzoj2038[2009国家集训队]小Z的袜子(hose)相关推荐

  1. BZOJ2038 : [2009国家集训队]小Z的袜子(hose)(莫队算法)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 19269 Solved: 8851 [Sub ...

  2. [BZOJ2038] [2009国家集训队] 小Z的袜子(hose) (莫队)

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只 ...

  3. bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队

    Time Limit: 20 Sec Memory Limit: 259 MB Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小 ...

  4. BZOJ2038: [2009国家集训队]小Z的袜子(hose)

    [传送门:BZOJ2038] 简要题意: 给出n只袜子,每只袜子都有颜色 有多个询问,每次询问一个区间L,R,求出在这个区间内选出两只相同颜色袜子的概率,以最简分数形式输出(不用化成整数,如果概率为0 ...

  5. bzoj2038: [2009国家集训队]小Z的袜子(hose)(莫队)

    题目传送门 强啊学了一发莫队. 解法: 刚看到这题没啥思路就只有一个n方的垃圾.. %题解说是莫队,学了一发. 莫队大概就是用来优化暴力的一个东西. 这道题的数学解法相必大家都会.. 在n个袜子里面选 ...

  6. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  7. 2038: [2009国家集训队]小Z的袜子(hose)+莫队入门

    题目链接:2038: [2009国家集训队]小Z的袜子(hose) 题目: Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再 ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

  9. 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)

    题目传送门 1 /* 2 莫队算法:求出[l, r]上取出两只相同袜子的个数. 3 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 4 [L ...

最新文章

  1. WINCE6.0显示驱动模型介绍
  2. asp实现批量录入数据
  3. 计算机组成原理 第四章【指令系统】课后作业解析【MOOC答案】
  4. 深入Java关键字null
  5. 598. 范围求和 II
  6. 二级c语言评分标准一样吗,计算机二级评分严格吗 步骤错了有分吗
  7. php控制器实现自动映射,PHP实现路由映射到指定控制器
  8. hdu4418 概率dp+高斯消元(近日吐槽)
  9. mysql查询优化~group by知多少
  10. form表单提交数据
  11. H5调用摄像头拍照保存到服务器再把路径存到数据库中
  12. DroidCam连接教程+资源
  13. 注册测绘师考试(个人总结)—工程测量、地籍测量、房产测量、界线测量
  14. USB大容量存储设备禁用后恢复不了问题解决方案
  15. 导数、微分、偏导数、全微分、方向导数、梯度的定义与关系
  16. ‘The INSERT statement conflicted with the FOREIGN KEY constraint “FK_TourismReservation_Users“. The
  17. iOS home键直接退出
  18. 汤小丹计算机操作系统慕课版课后题答案第五章:储存器管理
  19. 如何将音乐导入iphone手机,怎么将歌曲导入到iphone
  20. GEA 4.1234 矩阵 矢量 点 四元数

热门文章

  1. 【Java】Springboot项目中Transactional的使用方式
  2. 数据库-mysql概述
  3. github可视化工具_Github标星2.6K!微软开源的可视化工具,未免太酷炫了吧
  4. 计算机体系结构_计算机体系结构知识笔记
  5. 前端开发技术:HTML5 JS 前端开发主要功能!
  6. python创建person类用printinfo方法_python基础练习题7
  7. JS ||(或运算)详解
  8. oracle客观题题库,oralce题库及答案.doc
  9. 获取props里面的数据_Kafka 使用Java实现数据的生产和消费demo
  10. opa847方波放大电路_比例阀伺服放大器设计(一)