BZOJ 2038 小Z的袜子
来源:互联网 发布:黑蜘蛛软件下载 编辑:程序博客网 时间:2024/05/01 13:22
BZOJ 2038
题目大意
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……
具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。
你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子。当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以方便自己选择。
题解
莫队算法,分块,将询问按第一关键字l所在块编号,第二关键字r排序,然后暴力处理。关于莫队算法时间复杂度的证明这里不加赘述,网上有较多资料。
#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#define ll long longusing namespace std;const int N = 50000 + 10;struct Qry{ int l, r, num; ll a, b;}q[N];int n, m, a[N], pos[N];ll ans, s[N];ll gcd(ll x, ll y){return y == 0 ? x : gcd(y, x%y);}ll sqr(ll x){return x * x;}bool cmp(Qry a, Qry b){ if(pos[a.l] == pos[b.l]) return a.r < b.r; else return a.l < b.l;}bool cmp_num(Qry a, Qry b){ return a.num < b.num;}void init(){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++){ scanf("%d", &a[i]); } int tmp = sqrt(n); for(int i = 1; i <= n; i++){ pos[i] = (i - 1) / tmp + 1; } for(int i = 1; i <= m; i++){ scanf("%d%d", &q[i].l, &q[i].r); q[i].num = i; } sort(q+1, q+m+1, cmp);}void update(int p, int add){ ans -= sqr(s[a[p]]); s[a[p]] += add; ans += sqr(s[a[p]]);}void work(){ for(int i = 1, l = 1, r = 0; i <= m; i++){ for(; r < q[i].r; r++) update(r+1, 1); for(; r > q[i].r; r--) update(r, -1); for(; l < q[i].l; l++) update(l, -1); for(; l > q[i].l; l--) update(l-1, 1); if(q[i].l == q[i].r){ q[i].a = 0; q[i].b = 1; continue; } q[i].a = ans - (q[i].r - q[i].l + 1); q[i].b = (ll)(q[i].r - q[i].l + 1) * (q[i].r - q[i].l); ll g = gcd(q[i].a, q[i].b); q[i].a /= g; q[i].b /= g; } sort(q+1, q+m+1, cmp_num); for(int i = 1; i <= m; i++){ printf("%lld/%lld\n", q[i].a, q[i].b); }}int main(){ init(); work(); return 0;}
0 0
- BZOJ 2038: 小Z的袜子
- BZOJ 2038小Z的袜子 分块
- BZOJ 2038 小z的袜子
- bzoj-2038 小Z的袜子 hose
- BZOJ 2038 小Z的袜子(hose)
- BZOJ 2038 小Z的袜子
- 【BZOJ】2038 小Z的袜子
- BZOJ 2038 小Z的袜子
- 【BZOJ 2038】小Z的袜子
- BZOJ 2038 小Z的袜子
- BZOJ 2038小z的袜子
- bzoj 2038 小Z的袜子
- bzoj 2038 小Z的袜子 莫队
- bzoj 2038 小z的袜子 莫队
- bzoj 2038 小z的袜子
- bzoj 2038: [2009国家集训队]小Z的袜子(hose)
- 【BZOJ 2038】 [2009国家集训队]小Z的袜子(hose)
- 线性莫队算法 BZOJ 2038 小Z的袜子
- 习题 **十五只猴子围成一圈选大王。
- 9.2
- Could not resolve all dependencies for configuration ':app:_debugApk'
- ios移动端(H5)alert/confirm提示信息去除网址(URL)
- 分块运动-原生JS详解
- BZOJ 2038 小Z的袜子
- HDU 3533 Escape 预处理+bfs
- QQ消息之粘性效果,自己写的
- 多线程之线程同步
- ftp服务器配置问题
- bzoj1878 [SDOI2009]HH的项链
- 常量指针 典例
- 特殊回文数
- struts 文件批量上传