10.31-11.1Test(未完)
10.31-11.1Test
题目 | 描述 | 做法 |
---|---|---|
\(BSOJ5177\) | 求在\(n\)个数里选\(K\)个的所有方案的异或和之和 | 按位讨论,组合数算 |
\(BSOJ5178\) | 化简\(\displaystyle{f_i=\max_{0\le j<i\vee c_j\mid (i-j)}\{f_j+\frac{c_j}{i-j}\times v_j\}}\) | 用单调栈实现斜率优化 |
\(BSOJ5121\) | 同6318 | 同6318 |
\(BSOJ5180\) | 询问一个矩形元素和/最大值/最小值 | 二维\(RMQ\)变形,八矩形拼凑 |
\(BSOJ5181\) | 给出\(n\)条形如\(x\)在\(y\)左边信息,求方案数 | 树形\(DP\) |
\(BSOJ5182\) | 可以\(BAN\)一些区域,增加一个位置人数,动态询问所有人到\(x\)距离和最小的\(x\) | 树状数组维护带权中位数,线段树线段覆盖 |
\(\text{Day1}\)
\(T1\)
校庆志愿者小Z在休息时间和同学们玩卡牌游戏。一共有n张卡牌,每张卡牌上有一个数Ai,每次可以从中选出k张卡牌。一种选取方案的幸运值为这k张卡牌上数的异或和。小Z想知道所有选取方案的幸运值之和除以998244353的余数。
考虑异或只与每一位上的结果有关
若第\(k\)位上有\(cnt\)个\(1\)
则贡献为\(\displaystyle{2^k\sum_{i=K+cnt-n}^{cnt}\begin{pmatrix}cnt\\i\end{pmatrix}\begin{pmatrix}n-cnt\\K-i\end{pmatrix}}\)
\(T2\)
城市中有一条长度为n的道路,每隔1的长度有一个公交车站,编号从0到n,学校在0号车站的位置。其中每个公交车站(除了n号车站)有两个属性ci和vi,代表从这个公交车站出发的公交车的性质。ci代表这个从i出发的公交车,相邻两个停靠站之间的距离。vi表示每坐1站的花费。
注意,一辆公交车出发后会向n号车站的方向行进。同时,一名乘客只能从起点站上车,但可以从任意停靠站下车。校庆志愿者小Z为了帮助校友查询有关城市交通费用的问题,想知道从0号车站(也就是学校)出发,到达每个公交车站的最小花费,于是他找到了你。
考虑斜率优化
\(T3\)
同6318
\(\text{Day2}\)
\(T1\)
为了准备校庆庆典,学校招募了一些学生组成了一个方阵,准备在庆典上演出。
这个方阵是一个nm的矩形,第i行第j列有一名学生,他有一个能力值Ai,j。
校长会定期检查一个pq的方阵,询问这个方阵的学生能力值之和,或是学生能力值的最大值,或是学生能力值的最小值。由于校长不喜欢一个方阵长宽之比差太多,他每次询问的方阵的长不会超过宽的两倍。作为校庆筹办组组长的你,应该迅速并准确的回答校长所问的问题。
普通二维\(RMQ\)
inline int Query_max(re int x1,re int y1,re int x2,re int y2){
re int lenx=log[x2-x1+1],leny=log[y2-y1+1];
return max(mx[x1][y1][lenx][leny],max(mx[x2-(1<<lenx)+1][y1][lenx][leny],max(mx[x1][y2-(1<<leny)+1][lenx][leny],mx[x2-(1<<lenx)+1][y2-(1<<leny)+1][lenx][leny])));
}
inline int Query_min(re int x1,re int y1,re int x2,re int y2){
re int lenx=log[x2-x1+1],leny=log[y2-y1+1];
return min(mi[x1][y1][lenx][leny],min(mi[x2-(1<<lenx)+1][y1][lenx][leny],min(mi[x1][y2-(1<<leny)+1][lenx][leny],mi[x2-(1<<lenx)+1][y2-(1<<leny)+1][lenx][leny])));
}
inline void Read(void){
re int i,j,x,y;
read(n);read(m);
*log=-1;for(i=1;i<=max(n,m);++i)log[i]=log[i>>1]+1;
memset(mx,-INF,sizeof mx);
memset(mi,INF,sizeof mi);
for(i=1;i<=n;++i)
for(j=1;j<=m;++j){read(x);mx[i][j][0][0]=mi[i][j][0][0]=x;sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+x;}
for(i=1;i<=log[n];++i)
for(x=1;x+(1<<i)-1<=n;++x)
for(y=1;y<=m;++y){
mx[x][y][i][0]=max(mx[x][y][i-1][0],mx[x+(1<<(i-1))][y][i-1][0]);
mi[x][y][i][0]=min(mi[x][y][i-1][0],mi[x+(1<<(i-1))][y][i-1][0]);
}
for(i=1;i<=log[m];++i)
for(x=1;x<=n;++x)
for(y=1;y+(1<<i)-1<=m;++y){
mx[x][y][0][i]=max(mx[x][y][0][i-1],mx[x][y+(1<<(i-1))][0][i-1]);
mi[x][y][0][i]=min(mi[x][y][0][i-1],mi[x][y+(1<<(i-1))][0][i-1]);
}
for(i=1;i<=log[n];++i)
for(j=1;j<=log[m];++j)
for(x=1;x+(1<<i)-1<=n;++x)
for(y=1;y+(1<<j)-1<=m;++y){
mx[x][y][i][j]=max(mx[x][y][i][j],max(mx[x][y][i-1][j-1],mx[x+(1<<(i-1))][y][i-1][j-1]));
mx[x][y][i][j]=max(mx[x][y][i][j],max(mx[x][y+(1<<(j-1))][i-1][j-1],mx[x+(1<<(i-1))][y+(1<<(j-1))][i-1][j-1]));
mi[x][y][i][j]=min(mi[x][y][i][j],min(mi[x][y][i-1][j-1],mi[x+(1<<(i-1))][y][i-1][j-1]));
mi[x][y][i][j]=min(mi[x][y][i][j],min(mi[x][y+(1<<(j-1))][i-1][j-1],mi[x+(1<<(i-1))][y+(1<<(j-1))][i-1][j-1]));
}
}
注意到条件方阵的长不会超过宽的两倍
因此我们并不需要保存任意长宽比的矩形,而是可以把长拆成两半
\(T2\)
经过一天的忙碌,志愿者们结束了他们的工作,准备站在一排合影留念。
现在总共有n名志愿者留下来准备合影。不过,进程并不是那么顺利,有些同学提出了一些奇奇怪怪的要求(每个人最多只会提出一个):他必须站在另外一个同学的左边(不一定相邻)。这时,其中一位来自11班的同学小Z陷入了沉思:总共有多少种不同的合法方案数呢?(两种方案不同当且仅存在至少一名同学他在这两个方案当中站的位置不同。)小Z很快就算出来了,于是就把自己的这个问题告诉了好朋友小C。不过,由于小C的数学功底不足,小Z只要求他算出这个答案模质数p的余数就可以了。可就算这样,小C也不会做。为了显示自己的水平很高(实际上很低),他找到了你,并把你得出的答案报给小Z,所以你可一定要算对啊!
对条件\((x,y)\),连边\(y\rightarrow x\)表示\(y\)限制\(x\)
首先可以证明如果没有环,这就是一个森林
因此我们拿\(0\)向根连边
\(DP\)转移类似数列归并
\(\displaystyle{f_x=\sum_{y\in son_x}f_y\begin{pmatrix}size_x'\\size_y\end{pmatrix}}\)
其中\(size_x'\)表示\(x\)在归并\(y\)之前的子树大小
\(T3\)
校庆筹备组的老师们正在寻找合适的地方来举办校庆庆典。
学生们的位置和可以举办庆典的位置在x轴的正半轴取值在[1,n]的整数位置上。
老师们选择的地点是会根据参加典礼的学生位置来决定的,具体来说:定义一个位置的距离和为该位置到所有参加学生的距离之和。如果一个位置的距离和最小,且它比所有和它距离和相等的位置的位置更靠左,则老师们会选择这个位置。
开始时,所有的位置都可以举办庆典。但很可惜的是,并不是所有的位置都能举办庆典,有些奇怪的事件会使[L,R]这段区间不能举办庆典,不过有时也会使[L,R]可以重新举办庆典(并不保证[L,R]之前的每个位置都不能举办庆典)。
有时一些学生会因为某些原因不能参加庆典,有时一些学生会主动报名参加庆典。
作为一名合格的老师,你需要求出每个事件发生后庆典应该选择的位置,如果没有合法位置,请输出-1。
\(Step~1\)
首先我们表示出选\(x\)的代价
\(\displaystyle{w_x=\sum_{i=1}^n \mid i-x\mid a_i}\)
\(\displaystyle{=\sum_{i=1}^{x-1} (x-i)a_i+\sum_{i=x+1}^{n} (i-x)a_i}\)
inline void Add(re int x,re ll v){
re int i;
for(i=x;i<=n;i+=lowbit(i)){c1[i]+=v;c2[i]+=v*x;}
}
inline ll Ask(re ll sum[],re int x){re ll res=0;while(x){res+=sum[x];x-=lowbit(x);}return res;}
inline ll Calc(re int x){if(abs(x)==INF)return 0x3f3f3f3f3f3f3f3fll;return 1ll*x*(2*Ask(c1,x)-Ask(c1,n))+(Ask(c2,n)-2*Ask(c2,x));}
然后很轻易的可以得到\(x\)取带权中位数(可以为区间)最优
因此我们可以用树状数组+二分\(O(log^2_2n)\)求出这个中位数
\(\color{red}{Trick}\):
考虑二分求前缀和的过程实际上有必要每次\(O(log_2n)\)重跳吗
不,考虑二分的过程实际上是对值域的划分
如果在一个位置我们向后跳\(2^k\)个位置,后面就不会再跳了
inline int Getkth(re ll k){
re int i,x=0;
for(i=lg;~i;--i)if(c1[x|(1<<i)]<k&&((x|(1<<i))<=n)){x|=(1<<i);k-=c1[x];}
return x+1;
}
\(Step~2\)
这部分区域可能被\(\text{BAN}\)掉,可以简单得到备选点只可能位离中位数(区间)最近的点
用线段树来做到这一点
inline void pushdown(re int x,re int l,re int r){
if(!lz[x])return ;
if(lz[x]&1){lz[ls(x)]=lz[rs(x)]=cs[ls(x)]=cs[rs(x)]=1;l0[ls(x)]=l;r0[ls(x)]=(l+r)>>1;l0[rs(x)]=((l+r)>>1)+1;r0[rs(x)]=r;}
else{lz[ls(x)]=lz[rs(x)]=cs[ls(x)]=cs[rs(x)]=2;l0[ls(x)]=l0[rs(x)]=INF;r0[ls(x)]=r0[rs(x)]=-INF;}
lz[x]=0;
}
inline void pushup(re int x){
cs[x]=cs[ls(x)]&cs[rs(x)];
l0[x]=min(l0[ls(x)],l0[rs(x)]);
r0[x]=max(r0[ls(x)],r0[rs(x)]);
}
inline void Query(re int pos,re int l,re int r,re int&ql,re int&qr,re int x){
re int mid=(l+r)>>1;
if(l==r){if(cs[pos]&1)ql=qr=l;return ;}
pushdown(pos,l,r);
if(x<=mid){Query(ls(pos),l,mid,ql,qr,x);qr=min(qr,l0[rs(pos)]);}
else {Query(rs(pos),mid+1,r,ql,qr,x);ql=max(ql,r0[ls(pos)]);}
pushup(pos);
}
inline void Change(re int pos,re int l,re int r,re int ql,re int qr,re int v){
re int mid=(l+r)>>1;
if(cs[pos]==v+1)return ;
if(l>=ql&&r<=qr){
lz[pos]=cs[pos]=v+1;//纯
if(v){l0[pos]=INF;r0[pos]=-INF;}
else {l0[pos]=l;r0[pos]=r;}
return ;
}
pushdown(pos,l,r);
if(ql<=mid)Change(ls(pos),l,mid,ql,qr,v);
if(qr>mid)Change(rs(pos),mid+1,r,ql,qr,v);
pushup(pos);
}
10.31-11.1Test(未完)的更多相关文章
- 17.10.31&11.01
10.31模拟考试 Prob.1(AC)裸的矩阵幂 Prob.2(WA)(类似括号匹配求合法方案数) 卡特兰数的一个模型运用.可以推出一个式子(推导方法一个erge讲的,一个骚猪讲的) Prob.3( ...
- 《C程序设计的抽象思维》2.10编程练习(未完)
本文地址:http://www.cnblogs.com/archimedes/p/programming-abstractions-in-c-2.html,转载请注明源地址. 2.按照规定求圆柱的表面 ...
- 小白的python之路10/31&11/1文件操作系统
文件操作系统的介绍 ext4的superblock块是超级快,innode 块是专门存放文件信息的, block count将硬盘做成block块,对操作系统而言写在block块上就可了,eg:文件1 ...
- Go web编程学习笔记——未完待续
1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...
- CocoStuff—基于Deeplab训练数据的标定工具【一、翻译】(未完)
一.CocoStuff简介 CocoStuff是一款为deeplab设计的,运行在Matlab中的语义标定工具,其标定结果和结合Deeplab训练出的结果均为mat文件格式,该项目源码已在github ...
- 我的SQL总结---未完待续
我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...
- [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)
[教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...
- jQuery 学习笔记(未完待续)
一.jQuery概述 宗旨: Write Less, Do More. 基础知识: 1.符号$代替document.getElementById()函数 2.使 ...
- 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)
计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...
随机推荐
- 2019-7-17 正则表达式和re模块
一.re模块与正则表达式之间的关系 正则表达式不是python独有的,它是一门独立的技术 所有的编程语言都可以使用正则 但是如果你想在python中使用,你就必须依赖于re模块 正则的官方定义:正则表 ...
- python知识架构
如果看不清可以右键图片打开新的标签页 原文链接:https://blog.csdn.net/oscer2016/article/details/80129284
- CLRS10.2-8练习 - 单指针值实现双向链表
要求: Explain how to implement doubly linked lists using only one pointer value x.np peritem instead o ...
- NFS实现多服务器文件共享
服务器 1.安装所需的软件包 yum install -y rpc-bind nfs-utils 2.设为开机自启动 systemctl enable nfs systemctl enable rpc ...
- Resharper2019 1.2破解教程
下载安装 Resharper 去Resharper官网下载安装 Resharper官网地址 Resharper下载地址 破解 (破解dll百度网盘链接)[https://pan.baidu.com/s ...
- 浅谈有趣的 //go: 指令
前言 如果你平时有翻看源码的习惯,你肯定会发现.咦,怎么有的方法上面总是写着 //go: 这类指令呢.他们到底是干嘛用的? 今天我们一同揭开他们的面纱,我将简单给你介绍一下,它们都负责些什么 go:l ...
- Github强制找回管理员账号密码
步骤: 1. 登录Github所在的服务器,切换用户为git:su git 2. 进入Github的Rails控制台:gitlab-rails console production 3. 查看超级管理 ...
- 【RAC】将单实例备份集恢复为rac数据库
[RAC]将单实例备份集恢复为rac数据库 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ...
- 基于centos7.6离线部署开k3s
K3S简介: https://k3s.io/ https://github.com/rancher/k3s https://github.com/rancher/k3s/releases / ...
- nodejs 将不同文件夹中的视频整合到一个文件夹中
var fs = require("fs") var path = require("path") var listRealPath = path.resolv ...