又是原题,写下题解吧

Median

首先时限有 2s(学校评测机太烂,加到 4s 了),可以放心地筛 \(1e7\) 个质数并算出 \(s_2\),然后问题变为类似滑动求中位数。发现 \(s_2\) 几乎是随机的,可以用桶来维护中位数指针,每次暴力移动。

实现比较精妙

code
const int N = 1e7+5;
int n,k,w; int pri,mid,p[N],s[N],s2[N],cnt[N*2];
bool vis[179424674]; void sieve(int n) {
For(i,2,n) {
if( !vis[i] ) p[++pri] = i;
for(int j = 1; j <= pri && i*p[j] <= n; ++j) {
vis[i*p[j]] = 1;
if( i % p[j] == 0 ) break;
}
}
} namespace sub1 {
int mid,pre,cur=-1;
LL ans;
void main() {
mid = k/2+1;
for(int i = 1; i < k; ++i) ++cnt[s2[i]];
For(i,k,n) {
++cnt[s2[i]], pre += s2[i]<=cur;
if( i > k ) --cnt[s2[i-k]], pre -= s2[i-k]<=cur;
while( pre < mid ) pre += cnt[++cur];
while( pre-cnt[cur] >= mid ) pre -= cnt[cur--];
ans += cur;
}
printf("%lld.0",ans);
exit(0);
}
}
namespace sub2 {
int mid,prel,prer,l=-1,r=-1;
LL ans;
void main() {
mid = k/2;
for(int i = 1; i < k; ++i) ++cnt[s2[i]];
For(i,k,n) {
++cnt[s2[i]], prel += s2[i]<=l, prer += s2[i]<=r;
if( i > k ) --cnt[s2[i-k]], prel -= s2[i-k]<=l, prer-= s2[i-k]<=r;
while( prel < mid ) prel += cnt[++l];
while( prel-cnt[l] >= mid ) prel -= cnt[l--];
while( prer < mid+1 ) prer += cnt[++r];
while( prer-cnt[r] >= mid+1 ) prer -= cnt[r--];
ans += l+r;
}
printf("%.1lf",ans/2.0);
exit(0);
}
} signed main() {
sieve(179424673);
read(n,k,w); mid = k/2+1;
For(i,1,n) s[i] = (LL)p[i] * i %w, s2[i] = s[i] + s[i/10+1];
if( k & 1 ) sub1::main();
else sub2::main();
}

Game

澄清题意:“分数差”指 Alice 的得分减 Bob 的得分

考虑用桶来维护 \(s\) 集合。设 \(mx\) 为桶中最大元素,则如果新加进来的数大于 \(mx\),那么一定会立刻被选择,因此它就不用加入桶;否则移动 \(mx\) 找到桶中最大元素。整个过程中 \(mx\) 是单减的。时间复杂度 \(O(nk)\)。

需要大力卡常

code
const int N = 1e5+5;
int n,T,a[N],p; int mx,lsh[N],cnt[N]; void solve() {
LL ans = 0;
read(p);
for(int i = 1; i < p; ++i) {
++cnt[a[i]];
if( a[i] > mx ) mx = a[i];
}
int f = 1;
for(int i = p; i <= n; ++i, f = -f) {
if( a[i] >= mx ) { ans += f * lsh[a[i]]; continue; }
++cnt[a[i]];
while( !cnt[mx] ) --mx;
ans += f * lsh[mx], --cnt[mx];
}
for(int i = 1; i < p; ++i, f = -f) {
while( !cnt[mx] ) --mx;
ans += f * lsh[mx], --cnt[mx];
}
write(ans);
} signed main() {
read(n,T);
For(i,1,n) read(a[i]), lsh[i] = a[i];
sort(lsh+1,lsh+n+1), lsh[0] = unique(lsh+1,lsh+n+1)-lsh-1;
For(i,1,n) a[i] = lower_bound(lsh+1,lsh+lsh[0]+1,a[i])-lsh;
while( T-- ) solve();
return iocl();
}

Park

原题(不知道出题人改的什么鬼题面)

考虑先固定一个点,那么就可以直接 DP。时间复杂度 \(O(n^2)\)。

树上路径类问题通常尝试在 LCA 处将两条链拼起来,本题也不例外。发现对于一条路径,起点和终点是不等价的,因此设 \(f[i,j]\) 表示从 \(i\) 的子树走到 \(i\) 撒 \(j\) 个面包的最大差值,\(g[i,j]\) 为从 \(i\) 的子树走到 \(i\) 的。

转移见代码

code
const int N = 1e5+5;
int n,m,val[N];
vector<int> to[N]; LL ans,sum[N],f[N][105],g[N][105]; void dfs(int u,int fa) {
For(i,1,m) f[u][i] = sum[u], g[u][i] = sum[u]-val[fa];
//g[u]会在fa处用到(从fa走下来),无法让小朋友在u遇到fa的鸽子而自己不遇到
for(int v : to[u]) if( v != fa ) {
dfs(v,u);
For(i,0,m) ans = max(ans,f[u][i]+g[v][m-i]);
// v之前的子树 -> u -> v -> 子树v
For(i,1,m)
f[u][i] = max(f[u][i],max(f[v][i],f[v][i-1]+sum[u]-val[v])),
g[u][i] = max(g[u][i],max(g[v][i],g[v][i-1]+sum[u]-val[fa]));
// 不变;u不放;u放
}
} signed main() {
read(n,m);
For(i,1,n) read(val[i]);
for(int i = 1; i < n; ++i) {
int x,y; read(x,y);
to[x].pb(y), to[y].pb(x);
sum[x] += val[y], sum[y] += val[x];
}
dfs(1,0);
For(i,1,n) reverse(to[i].begin(),to[i].end());
// 答案与顺序有关,需要反转儿子来统计全
dfs(1,0);
write(ans);
return iocl();
}

20210720 noip21的更多相关文章

  1. noip21

    所以分差到底要不要取绝对值啊 T1 3分钟出暴力,十分钟码好,然后样例过不去... 好吧,我是sb,求中位数之前是要排序的. 直接冲暴力,50pts. \(w=3\) 的点,开个桶记录一下又有20pt ...

  2. 调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据

    前言 日常开发中,难免会用到判断今天是工作日.周末.法定节假日.节假日调休补班做一些业务处理,例如:仅在上班时间给用户推送消息.本文记录调用免费API查询全年工作日.周末.法定节假日.节假日调休补班数 ...

  3. Spring Boot 2.x基础教程:使用Elastic Job实现定时任务

    上一篇,我们介绍了如何使用Spring Boot自带的@Scheduled注解实现定时任务.文末也提及了这种方式的局限性.当在集群环境下的时候,如果任务的执行或操作依赖一些共享资源的话,就会存在竞争关 ...

  4. vue使用GraphVis开发无限拓展的关系图谱

    1.去GraphVis官网下载对应的js,新版和旧版的js有所不同,看自己需求引入旧版还是新版(GraphVis官方网址:http://www.graphvis.cn/) visgraph.min.j ...

  5. 超详细教程2021新版oracle官网下载Windows JAVA-jdk11并安装配置(其他版本流程相同)

    异想之旅:本人博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章发布平台为CSDN.博客园.简书和开源中国,后期可能会有个人博客,除此之外 ...

  6. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  7. 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(二)】

    资源下载:https://download.csdn.net/download/weixin_44893902/35123371 练习点设计:添加.删除.修改 一.语言和环境 实现语言:JAVA语言. ...

  8. 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】

    资源下载:https://download.csdn.net/download/weixin_44893902/34867237 练习点设计:模糊查询.删除.新增 一.语言和环境 1.实现语言:JAV ...

  9. 基于Spring MVC + Spring + MyBatis的【超市会员管理系统】

    资源下载: https://download.csdn.net/download/weixin_44893902/22035329 一. 语言和环境 实现语言:JAVA语言. 使用:MyEclipse ...

随机推荐

  1. SickOs1.2靶机

    仅供个人娱乐 靶机信息 靶机下载地址:https://www.vulnhub.com/entry/sickos-12,144/一.主机发现  arp-scan -l 二.端口扫描 1. masscan ...

  2. 零基础涂鸦智能面板SDK开发记录(一)

    前言 本人基础背景:在学校学了点JS,在blbl上看过几节node.js视频,现在是一名Android开发工程师,因公司需要学习涂鸦面板SDK开发.说真的除了官方的一些文档外,我真的找不到其他的资料. ...

  3. 'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写

    'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写 'Rem Everything是voidtools开发的一款本地NTFS文件和 ...

  4. 为什么说使用 Linux 系统学习 OpenGL 更方便

    前言 上一篇随笔介绍了我的电脑,同时也介绍了 Ubuntu 20.10 系统的安装和美化.这一篇,我将正式开始 OpenGL 之旅.使用 Ubuntu 来进行开发,不仅仅只是因为我对 Linux 桌面 ...

  5. Java-Mybatis动态SQL整理

    XML映射器 SQL映射文件的几个顶级元素: cache - 该命名空间的缓存配置 cache-ref - 引用其他命名空间的缓存配置 resultMap - 描述如何从数据库结果集中加载对象 sql ...

  6. 自己动手实现Lua--实现TAILCALL指令

    最近在看<自己动手实现Lua-虚拟机.编译器和标准库>.这是本挺不错的书,通过学习此书能够对Lua语言有比较深刻的理解,此外还可以对如何自己实现一门脚本语言有直观的认识.对于想学习Lua的 ...

  7. 【Mongodb】数据库备份与还原

    Mongodb 备份与还原 Mongodb 备份与还原 文件快照 快照备份 快照直接还原 从压缩文件还原 复制文件 备份文件 从文件还原 mongodump mongodump备份 mongodump ...

  8. Android WorkManager使用入门

    WorkManager使用入门 WorkManager提供了任务调度功能,我们可以对工作进行标记或命名. 我们用一个示例来演示如何使用WorkManager.本文使用Kotlin. 入门示例 grad ...

  9. S3C2440—7.存储控制器访问外设

    文章目录 一.内存接口的概念 二.存储控制器(内存控制器) 2.1 什么是存储控制器? 2.2 S3C2440存储控制器介绍 2.3 存储控制器如何处理不同位宽的外设 2.4 怎么确定芯片的访问地址? ...

  10. Android WorkManager工作约束,延迟与查询工作

    WorkManager工作约束,延迟与查询工作 本文可能会混用"工作"与"任务"这两个词. 本文例子使用Kotlin 准备一个工作类(任务)UploadWork ...