题目:    链接:https://www.luogu.org/problemnew/show/P1494 题意:一些袜子排成一排,每个袜子有固定的颜色.                          每次询问在[l,r]的袜子中等概率选两只,求有多大的概率抽到两只一样颜色的. 思路: 其实 就是 求     莫队维护 一波 cnt[ i ] * cnt[ i ]    就是模板嘛 #include<bits/stdc++.h> #define LL long long using nam…
题目链接:https://www.luogu.org/problemnew/show/P1494 #include <cstdio> #include <algorithm> #include <iostream> #include <cmath> using namespace std; const int maxn = 50000+10; inline long long read() { long long k=0; char c; c=getchar…
比较简单的莫队题,主要是为了熟练板子. 先考虑固定区间时我们怎么计算,假设区间\([l,r]\)内颜色为\(i\)的袜子有\(cnt_i\)只,那么对于颜色\(i\)来说,凑齐一双的情况个数为: \(cnt_i=0\)时,贡献为\(0\),这个我们特别处理(显然吧) \(cnt_i>0\)时,贡献为\(cnt_i\cdot (cnt_i-1)\) (先挑出一只再挑另一只) 最后我们考虑所有颜色以及总情况数,那么此时凑出一双的概率为: \[\frac{\sum cnt_i\cdot(cnt_i-1…
题目 P1494 [国家集训队]小Z的袜子 解析 在区间\([l,r]\)内, 任选两只袜子,有 \[r-l+1\choose2\] \[=\frac{(r-l+1)!}{2!(r-l-1)!}\] \[=\frac{(r-l+1)(r-l)}{2}\] 种选择. 对于一种颜色 设在区间\([l,r]\)内出现次数为\(cnt_i\) 从\(cnt_i\)只这种颜色的袜子里任选两只 就有\[cnt_i\choose2\] \[=\frac{cnt_i}{2!(cnt_i-2)}\] \[=\fr…
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小\(Z\)把这\(N\)只袜子从\(1\)到\(N\)编号,然后从编号\(L\)到\(R\)(\(L\)尽管小\(Z\)并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务便是告诉小\(Z\)…
P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线(离线意味着需要知道所有查询)区间查询 我理解的特点是从区间[L,R]到区间[L,R-1],[L+1,R],[L-1,R],[L,R+1]复杂度低 相较与线段树,线段树要求[l,mid],[mid,r]-->[l,r]复杂度较低 莫队时间复杂度为O(nlogn) 采用的是分块处理查询 实现需要注意的点…
题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子.当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以方便自己选择. 图片为本人原创 然后考虑莫队 会发现当\(cnt[i]-1\)时,对答案的贡献为\(1-2*cnt[i]\) 当\(cnt[i]+1\)时,对答案的贡献为\(1+2*cn…
题目链接:https://www.luogu.org/problemnew/show/P1494 题目大意:中文题目 具体思路:计算概率的时候,每一次是区间的移动,每一次移动,记得先将原来的记录的影响去掉,然后再加上新的值,每一次这样统计就可以了.然后计算概率的时候就是C(n,2),总的概率的计算方法,当前的颜色是的个数是t,然后就是C(t,2).总的概率就是C(r-l+1,2),这里的r-l+1指的是当前要求的区间的长度.所以,合法的区间就是C(t,2)/C(r-l+1,2). 注意特判l==…
题目链接:https://www.luogu.com.cn/problem/P1494 一道很经典的莫队模板题,然而每道莫队题的大体轮廓都差不多. 首先莫队是一种基于分块的算法,它的显著特点就是: 能在$O(1)$的时间内从$(l,r)$转换到$(l,r-1),(l-1,r),(l+1,r),(l,r+1)$. 然后它的总复杂度在$O(n\times \sqrt{n})$左右. 这道题中除了莫队的应用外,还需要处理一个组合数$(cul)$和一个$gcd$,然后跑莫队即可. AC代码: #incl…
莫队板子 代码 #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #define int long long using namespace std; struct Query{ int l,r,aid; }query[55000]; int ansa[55000],ansb[55000],c[55000],blocknum,midans,sz,belong[…