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。

  校长会定期检查一个p
q的方阵,询问这个方阵的学生能力值之和,或是学生能力值的最大值,或是学生能力值的最小值。由于校长不喜欢一个方阵长宽之比差太多,他每次询问的方阵的长不会超过宽的两倍。作为校庆筹办组组长的你,应该迅速并准确的回答校长所问的问题。

普通二维\(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]));
}
}

注意到条件方阵的长不会超过宽的两倍

因此我们并不需要保存任意长宽比的矩形,而是可以把长拆成两半

\(\color{blue}{\text{Code}}\)

\(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);
}

\(\color{blue}{\text{Code}}\)

10.31-11.1Test(未完)的更多相关文章

  1. 17.10.31&11.01

    10.31模拟考试 Prob.1(AC)裸的矩阵幂 Prob.2(WA)(类似括号匹配求合法方案数) 卡特兰数的一个模型运用.可以推出一个式子(推导方法一个erge讲的,一个骚猪讲的) Prob.3( ...

  2. 《C程序设计的抽象思维》2.10编程练习(未完)

    本文地址:http://www.cnblogs.com/archimedes/p/programming-abstractions-in-c-2.html,转载请注明源地址. 2.按照规定求圆柱的表面 ...

  3. 小白的python之路10/31&11/1文件操作系统

    文件操作系统的介绍 ext4的superblock块是超级快,innode 块是专门存放文件信息的, block count将硬盘做成block块,对操作系统而言写在block块上就可了,eg:文件1 ...

  4. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  5. CocoStuff—基于Deeplab训练数据的标定工具【一、翻译】(未完)

    一.CocoStuff简介 CocoStuff是一款为deeplab设计的,运行在Matlab中的语义标定工具,其标定结果和结合Deeplab训练出的结果均为mat文件格式,该项目源码已在github ...

  6. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  7. [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)

    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續) a10036it 发表于 2015-7-27 21:11:19 https://www.itsk.com/t ...

  8. jQuery 学习笔记(未完待续)

    一.jQuery概述    宗旨: Write Less, Do More.    基础知识:        1.符号$代替document.getElementById()函数        2.使 ...

  9. 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)

    计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...

随机推荐

  1. Symfony框架笔记

    控制器获取前端传入的参数 $parameters = $request->request; $data = $parameters->all(); 引用静态资源(js.css.img) 使 ...

  2. 1. Spark Streaming概述

    1.1 什么是Spark Streaming Spark Streaming类似于Apache Storm,用于流式数据的处理.根据其官方文档介绍,Spark Streaming有高吞吐量和容错能力强 ...

  3. MNIST机器学习入门(二)

    在前一个博客中,我们已经对MNIST 数据集和TensorFlow 中MNIST 数据集的载入有了基本的了解.本节将真正以TensorFlow 为工具,写一个手写体数字识别程序,使用的机器学习方法是S ...

  4. Visual Studio 2019 使用.Net Core 3.0 二

    一.遇到难题 在微软官方逛了一圈,看到了这个. 马上点击,进去看看什么情况. 1.安装previewVisual studio 2019 2.设置SDK previews in Visual Stud ...

  5. linux搭建GitLab

    GitLab CentOS6 1. 安装VMware和CentOS 2. 安装必备Linux插件 3. 准备安装GitLab 4. 开始安装GitLab 5. 配置GitLab 6. 启动GitLab ...

  6. iOS 12中获取WiFi的SSID

    开始搞智能家居,wifi获取不到了?? 小插曲 旧方法失效,19-12-15更新,ios13开始需要请求定位信息 SSID全称Service Set IDentifier, 即Wifi网络的公开名称. ...

  7. misc_register杂项设备

    include/linux/miscdevice.h 这些字符设备不符合预先确定的字符设备范畴 设备主设备号10 struct miscdevice { int minor; //次设备号(如果设置为 ...

  8. SparkSQL之dataframe写入mysql报错

    一.异常情况及解决方案 在使用Spark SQL的dataframe数据写入到相应的MySQL表中时,报错,错误信息如下: 代码的基本形式为: df.write.jdbc(url, result_ta ...

  9. uboot中的mmc命令(转)

    转载地址:https://blog.csdn.net/a624731186/article/details/37700205 一:mmc的命令如下: 1:对mmc读操作 mmc read addr b ...

  10. SPI bus 的收发编程

    https://linux-sunxi.org/SPIdev The SPI bus (or Serial Peripheral Interface bus) is a synchronous ser ...