又是原题,写下题解吧

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. Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)

    影响版本 Spring Framework 5.0 to 5.0.4 Spring Framework 4.3 to 4.3.14 poc https://github.com/zhzyker/exp ...

  2. Apache ActiveMQ(cve-2015-5254)

    影响版本 Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞 复现 使用工具执行命令 工具地址 https://github.com/matthiaskaiser/jmet/re ...

  3. 在Linearlayout中新增ScrollView支持滚动

    https://blog.csdn.net/wenzhi20102321/article/details/53491176 1.一般只需要在布局中加个ScrollView即可 2.如果布局中包含lis ...

  4. Android面试中多说这么一句话,薪水直接涨5k

    小鱼同学最近很难受,明明获得了人人羡慕的大厂Offer,走在路上都能被熟人祝贺,学弟学妹争着抢着求他进行经验分享. 但有件事一直让他很介意.其实这件事起因很简单,是关于这份Offer的薪资问题,面试的 ...

  5. .NetCore+OpenSSL实现Https

    前言 最近,有时间研究了一下HTTPS安全通信的原理,感兴趣的同学可以看下上一篇博文深入理解Https如何保证通信安全 ,随即联想到近段时间开发的.NetCore项目,.NetCore API应用程序 ...

  6. 关于const声明一些东西

    const int a;        int const a;        const int *a;     int *const a;    const int *const a;   前两个 ...

  7. Check Directory Existence in Shell

    The following command in one line can check if a directory exists. You can check the return value (& ...

  8. Golang语言系列-16-context上下文

    context上下文 控制子goroutine退出 全局变量方式 package main import ( "fmt" "sync" "time&q ...

  9. SQL 练习20

    查询各科成绩前三名的记录 select a.sid,a.cid,a.score from sc a left join sc b on a.cid = b.cid and a.score<b.s ...

  10. 经典树与图论(最小生成树、哈夫曼树、最短路径问题---Dijkstra算法)

    参考网址: https://www.jianshu.com/p/cb5af6b5096d 算法导论--最小生成树 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. im ...