20210720 noip21
又是原题,写下题解吧
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的更多相关文章
- noip21
所以分差到底要不要取绝对值啊 T1 3分钟出暴力,十分钟码好,然后样例过不去... 好吧,我是sb,求中位数之前是要排序的. 直接冲暴力,50pts. \(w=3\) 的点,开个桶记录一下又有20pt ...
- 调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据
前言 日常开发中,难免会用到判断今天是工作日.周末.法定节假日.节假日调休补班做一些业务处理,例如:仅在上班时间给用户推送消息.本文记录调用免费API查询全年工作日.周末.法定节假日.节假日调休补班数 ...
- Spring Boot 2.x基础教程:使用Elastic Job实现定时任务
上一篇,我们介绍了如何使用Spring Boot自带的@Scheduled注解实现定时任务.文末也提及了这种方式的局限性.当在集群环境下的时候,如果任务的执行或操作依赖一些共享资源的话,就会存在竞争关 ...
- vue使用GraphVis开发无限拓展的关系图谱
1.去GraphVis官网下载对应的js,新版和旧版的js有所不同,看自己需求引入旧版还是新版(GraphVis官方网址:http://www.graphvis.cn/) visgraph.min.j ...
- 超详细教程2021新版oracle官网下载Windows JAVA-jdk11并安装配置(其他版本流程相同)
异想之旅:本人博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章发布平台为CSDN.博客园.简书和开源中国,后期可能会有个人博客,除此之外 ...
- 2021record
2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...
- 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(二)】
资源下载:https://download.csdn.net/download/weixin_44893902/35123371 练习点设计:添加.删除.修改 一.语言和环境 实现语言:JAVA语言. ...
- 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】
资源下载:https://download.csdn.net/download/weixin_44893902/34867237 练习点设计:模糊查询.删除.新增 一.语言和环境 1.实现语言:JAV ...
- 基于Spring MVC + Spring + MyBatis的【超市会员管理系统】
资源下载: https://download.csdn.net/download/weixin_44893902/22035329 一. 语言和环境 实现语言:JAVA语言. 使用:MyEclipse ...
随机推荐
- 过渡——transition
① 设置参与过渡的属性 transition-property: ; all / transform / 参与过渡的属性 ② 设置过渡的时长 transition-duration: s ...
- pwnable.kr之unlink
pwnable.kr之unlink 之前在看别的东西,学习的随笔也没有写完......颓了几天. 由于最近在看堆,就把pwnable.kr上unlink这道题做一下,学习一下. 1.程序分析 #inc ...
- 2579页阿里P8Android学习笔记在互联网上火了,完整版开放下载
笔记作者:来自于阿里P8级大神: Mark 笔记特点:条理清晰,理论+实战+源码,含图像化表示更加易懂. 内容概要:Android 相关,性能优化,Java 相关,Kotlin 相关,网络相关,插件化 ...
- Python入门:ChainMap 有效管理多个上下文
摘要: Python的ChainMap从collections模块提供用于管理多个词典作为单个的有效工具. 本文分享自华为云社区<从零开始学python | ChainMap 有效管理多个上下文 ...
- View epub and mobi File on Linux
Calibre has stand-alone ebook viewer "ebook-viewer", start it in terminal: $ ebook-viewer ...
- HttpClient执行post请求
public class Httpclient_post { private ResourceBundle bundle; private String url; private BasicCooki ...
- deepin设置jdk全局变量
sudo vim /etc/bash.bashrc 在文件最后边添加 JAVA_HOME=jdk地址CLASSPATH=.:$JAVA_HOME/bin.tools.jarPATH=$JAVA_HOM ...
- NOIP 模拟 9 考试总结
T1 一道推规律的题,没想出来,暴力打得常数还太大了,挂了不少 题解 T2 这是一道二分题,很巧妙,但是对于想我一样懒得人,那个数据结构就水过去了 (裸的分块加强大的卡长和合适的块的大小可以卡过去) ...
- js 遍历数组对象求和
这个通常是求多个商品的总价遇到的情形: [ 0: {id: 1, name: "服务费", price: "1.00"} 1: {id: 2, name: &q ...
- UWP App Data存储和获取
这篇博客介绍如何在UWP开发时,如何存储App Data和获取. App Data是指用户的一些设定,偏好等.例如,App的主题,是否接收推送,离线接收消息等.需要区分下App Data和User D ...