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 ...
随机推荐
- 26. Remove Duplicates from Sorted Array*(快慢指针)
description: Given a sorted array nums, remove the duplicates in-place such that each element appear ...
- Flask(12)- 操作 Session
前言 Session 详解:https://www.cnblogs.com/poloyy/p/12513247.html 这一节来瞧一瞧如何用 Flask 操作 Session 功能 list 提供操 ...
- CF1539D PriceFixed[题解]
PriceFixed 题目大意 市场上又 \(n\) 种商品,每种商品的价格都是 \(2\) .对于第 \(i\) 种商品 \(a_i\) 件.对于商品 \(i\) 给出一个值 \(b_i\) ,如果 ...
- SpringBoot整合Shiro实现权限控制
目录 1.SpringBoot整合Shiro 1.1.shiro简介 1.2.代码的具体实现 1.2.1.Maven的配置 1.2.2.整合需要实现的类 1.2.3.项目结构 1.2.4.ShiroC ...
- ubuntu18.04安装redis-desktop-manager
通过proxychains4 clone项目,否则安装不成功 教程:https://www.cnblogs.com/bignode/p/9254500.html 1 git clone --recur ...
- python + mysql 实现表更新数据
实例如下: import pymysqldef Update_Set(): #打开数据库链接 db = pymysql.connect("localhost","root ...
- Skywalking-02:如何写一个Skywalking trace插件
如何写一个Skywalking trace插件 javaagent 原理 美团技术团队-Java 动态调试技术原理及实践 类图 实现 ConsumeMessageConcurrentlyInstrum ...
- Android从一个Fragment跳转到另一个Fragment后原来的组件不消失
问题描述 Activity上放置了一个Fragment,Fragment上有按钮,点了按钮后,应该跳转到另一个Fragment, but 原来的Fragment的按钮不会消失,新的Fragment不是 ...
- c++ 的父类 new 重载, 子类new 对象的时候会调用父类的operater new
子类在new 对象的 时候 父类的new 进行了重载,那么会调用父类的operater new() 函数 #include <iostream> #include <string& ...
- elementUI的el-input和el-select宽度 一致
在用vue时,用到了element组件的 el-input 和 el-select(多选框)组件,但是宽度显示不一样,查看了多选框的css,发现element-style是写死的 添加style=&q ...