2021.03.06【NOIP提高B组】模拟 总结
T1
看起来十分复杂,打表后发现答案是 \(n*m\mod p\)
具体的证明。。。
原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率,
穿过坐标[1 ~ n , 1 ~ m]的方阵中的整点的个数,总数即 n*m。
T2
考试时没想到 \(O(n^2)\) 的做法
A_{k+i-1}-B_i &=A_{k+j-1}-B_j \\
A_{k+i-1}-A_{k+j-1} &= B_i-B_j \\
A_i-A_j &= B_i-B_j
\end{aligned}
\]
所以只要先差分,再跑一边 \(\text{KMP}\) 或字符串哈希即可
字符串哈希
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1000005;
const LL M1=998244353,M2=1004535809,B=233;
int n,m,ans;
LL X1[N],X2[N],P1[N],P2[N],Y1,Y2,x[N],y[N];
inline bool check(int i) {
return
(Y1+1LL*P1[m]*X1[i-1]%M1)%M1==X1[i+m-1] &&
(Y2+1LL*P2[m]*X2[i-1]%M2)%M2==X2[i+m-1];
}
int main() {
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%lld",&x[i]);
for(int i=1;i<=m;i++)scanf("%lld",&y[i]);
for(int i=1;i<n;i++)x[i]=x[i+1]-x[i],x[i]+=2e9;
for(int i=1;i<m;i++)y[i]=y[i+1]-y[i],y[i]+=2e9;
--n,--m;
P1[0]=P2[0]=1;
for(int i=1;i<=n;i++) {
X1[i]=(1LL*X1[i-1]*B%M1+1LL*x[i])%M1;
X2[i]=(1LL*X2[i-1]*B%M2+1LL*x[i])%M2;
P1[i]=(1LL*P1[i-1]*B)%M1;
P2[i]=(1LL*P2[i-1]*B)%M2;
}
for(int i=1;i<=m;i++) {
Y1=(1LL*Y1*B%M1+1LL*y[i])%M1;
Y2=(1LL*Y2*B%M2+1LL*y[i])%M2;
}
for(int i=1;i<=n-m+1;i++)
if(check(i))++ans;
printf("%d",ans);
}
\(\text{KMP}\)
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
int n,m,ans,x[N],y[N],nxt[N];
int main() {
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&x[i]);
for(int i=1;i<=m;i++)scanf("%d",&y[i]);
for(int i=1;i<n;i++)x[i]=x[i+1]-x[i];
for(int i=1;i<m;i++)y[i]=y[i+1]-y[i];
--n,--m;
for(int i=2,j=0;i<=m;i++) {
while(j && y[i]!=y[j+1])j=nxt[j];
if(y[i]==y[j+1])++j;
nxt[i]=j;
}
for(int i=0,j=0;i<=n;i++) {
while(j && x[i]!=y[j+1])j=nxt[j];
if(x[i]==y[j+1])++j;
if(j==m)++ans,j=nxt[j];
}
printf("%d",ans);
}
T3
考试时:不考虑 \(k\) 直接树形 DP ,奇妙地拿了 30
赛后:由于原题意思就是不能直接地祖孙关系,因为一个子树地 DFS 序是连续的
只要选的区间不相交即可,用 DP 解决
设 \(dp_{i,j}\) 为第 \(j\) 个果子选了 DFS 序为 \(i\) 的节点的最大美味值
可以从 \(dp_{i+1,j}\) ,\(dp_{\text{next subtree},j}\) ,和 \(dp_{\text{next subtree},j-1}+w_{\text{node of i}}\) 转移
数据十分奇妙,要开滚动数组。
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,k,op,dp[N][2],f[N],w[N],to[N],lst[N],nxt[N],rk[N],sz[N],odd,ans;
void Pre(int u) {
rk[++odd]=u,sz[u]=1;
for(int i=lst[u],v;i;i=nxt[i])
Pre(v=to[i]),sz[u]+=sz[v];
}
int main() {
freopen("galo.in","r",stdin);
freopen("galo.out","w",stdout);
scanf("%d%d",&n,&k),++k;
for(int i=2;i<=n;i++) {
scanf("%d%d",&f[i],&w[i]);
to[i]=i,nxt[i]=lst[f[i]];
lst[f[i]]=i;
}
Pre(1);
for(int C=1,j=0;C<=k;C++,j^=1) {
for(int i=n;i>=1;i--)
dp[i][j]=max(dp[i+1][j],max(dp[i+sz[rk[i]]][j],dp[i+sz[rk[i]]][j^1]+w[rk[i]]));
ans=max(ans,dp[1][j]);
}
printf("%d",ans);
}
T4
好家伙,看到子树修改,本蒟蒻直接一个树剖,好吧看错题+爆栈直接 WA 10
正解:直接 BFS 即可,设 \(F_i\) 为从根到这个点有多少个打了标记,若 \(F_i+Color_i\) 是偶数就不用翻转
#include<bits/stdc++.h>
using namespace std;
inline int Rd() {
register int x=0;
char C=getchar();
for(;C<'0'||C>'9';C=getchar()) ;
for(;C>'/'&&C<':';C=getchar()) x=(x<<1)+(x<<3)+(C^48);
return x;
}
const int N=500005;
int n,x[N],vis[N],lst[N],nxt[N],to[N],f[N],q[N],head,tail=1;
int main() {
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
n=Rd();
for(int i=1;i<=n;i++)x[i]=Rd();
for(int i=1,fr;i<n;i++) {
fr=Rd(),to[i]=Rd();
nxt[i]=lst[fr],lst[fr]=i;
}
q[1]=1;
for(int u,flg;head<tail;) {
u=q[++head],flg=(f[u]+x[u])&1;
if(flg)vis[u]=1;
for(int i=lst[u],v;i;i=nxt[i])
f[v=to[i]]=f[u]+flg,q[++tail]=v;
}
for(int i=1;i<=n;i++)
if(vis[i])printf("%d ",i);
}
总结
T1:学会打表
T2:多去把式子转换一下
T3:子树修改就想想 DFS 序,多考虑转换成 DP
T4:不一味的想数据结构,考虑简化
2021.03.06【NOIP提高B组】模拟 总结的更多相关文章
- 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)
5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms ...
- JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动
5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms ...
- JZOJ 5812. 【NOIP提高A组模拟2018.8.14】 区间
5812. [NOIP提高A组模拟2018.8.14] 区间 (File IO): input:range.in output:range.out Time Limits: 1000 ms Memo ...
- 2021.04.03【NOIP提高B组】模拟 总结
T1 题目大意:求最小的 \(n\in[0,lim]\) 使得区间 \([L,R]\) 在线段树建树 \(build(0,n)\) 的区间内 考场时想到了正解,结果推式子退错了... 其实就是从下往上 ...
- 2021.05.03【NOIP提高B组】模拟 总结
比较水的一场比赛,却不能 AK T1 有 \(n\) 次,每次给 \(A_i,B_i\) 问以 \(i\) 结尾的 \(A,B\) 的匹配中最大和的最小值 问最大和的最小值,却不用二分. 如果暴力排序 ...
- [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码
Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...
- [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动
Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...
- 【NOIP提高A组模拟2018.8.14】 区间
区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...
- [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)
传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...
- [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)
传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...
随机推荐
- 微信小程序循环列表点击每一个单独添加动画
首先,咱们看一下微信小程序动画怎么实现,我首先想到的是anime.js,但是引入之后用不了,微信小程序内的css也无法做到循环的动态,我就去找官方文档看看有没有相应的方法,哎,还真有 点击这里查看 微 ...
- 3种方法改变this的指向
<body> <div style="width: 200px;height: 200px;hotpink;"></div> & ...
- 基于pgrouting的路径规划处理
对于GIS业务来说,路径规划是非常基础的一个业务,一般公司如果处理,都会直接选择调用已经成熟的第三方的接口,比如高德.百度等.当然其实路径规划的算法非常多,像比较著名的Dijkstra.A*算法等.当 ...
- 分布式任务调度平台XXL-JOB安装及使用
一.为什么需要任务调度平台 在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题: 不支持集群.不支持统计.没有管理平台.没有失败报警.没有监控等等而且在现在分布 ...
- DDT数据驱动性能测试(一)
DDT数据驱动性能测试(一) 一.csv数据文件设置 1.使用场景:测试过程中需要使用手机号码等大量数据时,用random函数随机生成数字:也可以使用Excel拖动生成一批手机号,也有可以从数据库中导 ...
- 自学java的困难
在自学的一些基础阶段,倒是没什么太大的问题,但是在想搞一个项目的时候,就显得手足无措了.因为,很多博主讲的的那些,都行需要一定的条件,比如前端框架,数据库的数据等等. 简单一点的SSM框架整合相对简单 ...
- GO语言学习——切片二
使用make()函数构造切片 格式: make([]T, size, cap) 其中: T:切片的元素类型 size:切片中元素的数量 cap:切片的容量 切片的本质 切片的本质就是对底层数组的封装, ...
- Hadoop(四)C#操作Hbase
Hbase Hbase是一种NoSql模式的数据库,采用了列式存储.而采用了列存储天然具备以下优势: 可只查涉及的列,且列可作为索引,相对高效 针对某一列的聚合及其方便 同一列的数据类型一致,方便压缩 ...
- S2-045远程命令执行漏洞的利用
Apache Struts2 远程命令执行 (S2-045) 漏洞介绍: 漏洞编号:S2-045CVE编号:CVE-2017-5638漏洞类型:远程代码执行漏洞级别:高危漏洞风险:黑客通过利用漏洞可以 ...
- Idea之常用插件
效率提升 Jrebel 热部署插件,修改代码编译就生效,节省大量重启服务时间.热部署支持修改方法代码,方法定义,类定义,接口定义(包括swagger文档),修改资源文件,修改mapper.xml(需配 ...