NOIP 模拟 $21\; \rm Median$
题解 \(by\;zj\varphi\)
对于这个序列,可以近似得把它看成随机的,而对于随机数列,每个数的分布都是均匀的,所以中位数的变化可以看作是常数
那么可以维护一个指向中位数的指针,同时维护有多少个小于等于它的数。
让这个指针跳值域,用有多少个小于等于它的数来判断
对于 \(k\) 为偶数的情况,维护两个指针即可
注意:素数要卡着筛,而且用 \(bitset\) 必须开 \(O2\)
Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define FI FILE *IN
#define FO FILE *OUT
template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
typedef long long ll;
static const int N=1.8e8+7,M=1e7+7;
int prim[M],s[M],s2[M],T[M<<1],lw,lw1,cnt,n,k,w,sum,mid,mid1,hk;
ll ans;
bitset<N> vis;
void Getprime() {
ri n=N-7;
for (ri i(2);i<=n;p(i)) {
if (!vis[i]) vis[prim[p(cnt)]=i]=1;
for (ri j(1);j<=cnt&&prim[j]*i<=n;p(j)) {
vis[i*prim[j]]=1;
if (!(i%prim[j])) break;
}
}
}
inline void mv1() {
while(lw<=hk) {
lw+=T[p(mid)];
if (lw>hk) break;
}
while(lw-T[mid]>hk) lw-=T[mid--];
}
inline void mv2() {
while(lw<=hk-1) {
lw+=T[p(mid)];
if (lw>=hk) break;
}
while(lw-T[mid]>=hk) lw-=T[mid--];
while(lw1<=hk) {
lw1+=T[p(mid1)];
if (lw1>hk) break;
}
while(lw1-T[mid1]>hk) lw1-=T[mid1--];
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
Getprime();
read(n),read(k),read(w);
hk=k>>1;
for (ri i(1);i<=n;p(i)) s[i]=(ll)prim[i]*i%w;
for (ri i(1);i<=n;p(i)) s2[i]=s[i]+s[i/10+1];
if (k&1) {
for (ri i(1);i<=n;p(i)) {
p(T[s2[i]]);
if (i>k&&s2[i]<=mid) p(lw);
if (i>=k) {
mv1(),ans+=mid;
if (s2[i-k+1]<=mid) --lw;
--T[s2[i-k+1]];
}
}
} else {
for (ri i(1);i<=n;p(i)) {
p(T[s2[i]]);
if (i>k&&s2[i]<=mid) p(lw);
if (i>k&&s2[i]<=mid1) p(lw1);
if (i>=k) {
mv2(),ans+=mid+mid1>>1;
if ((mid+mid1)&1) p(sum);
if (s2[i-k+1]<=mid) --lw;
if (s2[i-k+1]<=mid1) --lw1;
--T[s2[i-k+1]];
}
}
}
ans+=sum>>1;
printf("%lld",ans);
if (sum&1) puts(".5");
else puts(".0");
return 0;
}
}
int main() {return nanfeng::main();}
NOIP 模拟 $21\; \rm Median$的更多相关文章
- NOIP 模拟 $21\; \rm Game$
题解 考试的时候遇到了这个题,没多想,直接打了优先队列,但没想到分差竟然不是绝对值,自闭了. 正解: 值域很小,所以我们开个桶,维护当前最大值. 如果新加入的值大于最大值,那么它肯定直接被下一个人选走 ...
- NOIP 模拟 $21\; \rm Park$
题解 \(by\;zj\varphi\) 首先,分析一下这个答案:本质上是求在一条路径上,选择了一些点,这些点的贡献是它周围的点权和 - 它上一步的点权 对于一棵树,可以先确定一个根,然后每条路径就可 ...
- NOIP模拟3
期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 ...
- NOIP模拟 1
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ...
- 2021.5.22 noip模拟1
这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...
- NOIP 模拟 $38\; \rm c$
题解 \(by\;zj\varphi\) 发现就是一棵树,但每条边都有多种不同的颜色,其实只需要保留随便三种颜色即可. 直接点分治,将询问离线,分成一端为重心,和两端都不为重心的情况. 每次只关心经过 ...
- NOIP 模拟 $36\; \rm Cicada 拿衣服$
题解 \(by\;zj\varphi\) 发现右端点固定时,左端点的 \(min-max\) 单调递减,且对于 \(or\) 和 \(and\) 相减,最多有 \(\rm2logn\)个不同的值,且相 ...
- NOIP 模拟 $36\; \rm Dove 打扑克$
题解 \(by\;zj\varphi\) 引理 对于一个和为 \(n\) 的数列,不同的数的个数最多为 \(\sqrt n\) 证明: 一个有 \(n\) 个不同的数的数列,和最小就是 \(n\) 的 ...
- NOIP 模拟 $34\; \rm Equation$
题解 \(by\;zj\varphi\) 发现每个点的权值都可以表示成 \(\rm k\pm x\). 那么对于新增的方程,\(\rm x_u+x_v=k\pm x/0\) 且 \(\rm x_u+x ...
随机推荐
- Hive源码上手及问题解决
一.编译准备 1.下载源码包 https://github.com/apache/hive/archive/refs/tags/rel/release-2.3.7.zip 或使用git直接拉取 无法解 ...
- Vue Router的原理及history模式源码实现
Hash 模式 URL中 # 后面的内容作为路径地址,可以通过location.url直接切换路由地址,如果只改变了#后面的内容,浏览器不会向服务器请求这个地址,会把这个地址 记录到浏览器的访问历史中 ...
- NFS共享存储服务
NFS共享存储服务 一.NFS共享 1)NFS(Network File System)网络文件系统 ...
- Python之抖音快手代码舞--字符舞
先上效果,视频敬上: 字符舞: 代码舞 源代码: video_2_code_video.py 1 import argparse 2 import os 3 import cv2 4 import s ...
- uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...
- 《鸟哥Linux私房菜》 全套视频和PDF资料—— 老段带你学鸟哥Linux视频课程
<鸟哥的Linux私房菜-基础篇-服务器篇(第三版)>学习Linux极为经典的入门资料,但是还是很多同学难以坚持系统的看完整本书,最终以放弃而告终. 为了帮助大家更容易入门Linux,老段 ...
- 【连载】微服务网格Istio(一)
Istio基础 服务网格是用于描述构成应用程序的微服务网络以及应用之间的交互,服务网格的功能包括服务发现.负载均衡.故障恢复.指标和监控以及更加复杂的运维工作,例如A/B测试.金丝雀发布.限流.访问控 ...
- BOM(Bill of Material)物料清单基础知识(一)
一.BOM的基础概念 概 ...
- odoo里面context用法
原文转自:https://www.cnblogs.com/zhaoweihang/p/9698852.html <field name="partner_id" string ...
- maven 工程构建 之_____<dependencyManagement>标签
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...