2021.06.05【NOIP提高B组】模拟 总结
T1
题意:给你一个 \(n\) 个点 \(n\) 条边的有向图,
求每个店经过 \(K\) 条边后的边权和、最小边权
\(K\le 10^{10}\)
考试时:一直想着环,结果一直不知道怎么做
正解:倍增预处理出经过 \(2^r\) 条边的终点和最大值、最小值
然后直接查询即可
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=100005;
int n,up,to[N][40],mn[N][40],mnn;
LL sm[N][40],K,sum,tmp;
int main() {
scanf("%d%lld",&n,&K),up=log2(K)+1;
for(int i=0;i<n;i++)scanf("%d",&to[i][0]);
for(int i=0;i<n;i++)scanf("%d",&mn[i][0]),sm[i][0]=1LL*mn[i][0];
for(int j=1;j<=up;j++)
for(int i=0;i<n;i++) {
to[i][j]=to[to[i][j-1]][j-1];
mn[i][j]=min(mn[i][j-1],mn[to[i][j-1]][j-1]);
sm[i][j]=sm[i][j-1]+sm[to[i][j-1]][j-1];
}
for(int i=0,u;i<n;i++) {
u=i,tmp=K,sum=0,mnn=INT_MAX;
for(int j=up;~j;j--) {
if(tmp>=(1ll<<j)) {
sum+=sm[u][j];
mnn=min(mnn,mn[u][j]);
u=to[u][j];
tmp-=(1ll<<j);
}
}
printf("%lld %d\n",sum,mnn);
}
}
T2
题意:求 \(n\) 所有的原根,如果 \(Ord_n(a)=\varphi(n)\) 则 \(a\) 是 \(n\) 的原根
其中 \(Ord_n(a)\) 是满足 \(a^d\equiv 1\pmod n\) 的最小的 \(d\)
比赛时:直接暴力,但是怕超时改了范围,结果 Wa
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b) {
return b?gcd(b,a%b):a;
}
int n,rh,fl;
inline int Ord(int a) {
register int b=1;
for(int i=1;i<=rh;i++) {
b=b*a%n;
if(b==1%n)return i;
}
return -1;
}
int main() {
freopen("math.in","r",stdin);
freopen("math.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
rh+=(gcd(i,n)==1);
for(int i=1;i<=n;i++)
if(gcd(i,n)==1 && Ord(i)==rh)
printf("%d\n",i),fl=1;
if(!fl)puts("-1");
}
T3
题意:给你一颗有根树,保证一个点除了根节点以外的点都有唯一父亲
问有多少棵子树满足里面的结点是个连续的区间
考试:记录子树的最大值和最小值,然后用判断个数是否等于 \(mx-mn+1\)
正解:就是如此
细节炸了
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n,ans,sz[N],mn[N],mx[N],rd[N],lst[N],nxt[N<<1],to[N<<1],cnt;
inline void Ae(int fr,int go) { to[++cnt]=go,nxt[cnt]=lst[fr],lst[fr]=cnt; }
void dfs(int u,int f) {
mn[u]=mx[u]=u,sz[u]=1;
for(int i=lst[u],v;i;i=nxt[i])
if((v=to[i])^f) {
dfs(v,u);
mn[u]=min(mn[u],mn[v]);
mx[u]=max(mx[u],mx[v]);
sz[u]+=sz[v];
}
if(sz[u]==mx[u]-mn[u]+1)
++ans;
}
int main() {
scanf("%d",&n);
for(int i=1,u,v;i<n;i++) {
scanf("%d%d",&u,&v);
Ae(u,v),++rd[v];
}
for(int i=1;i<=n;i++)
if(!rd[i]) { dfs(i,i); break; }
printf("%d",ans);
}
T4
题意:一个长度为 \(n\) 的排列,可以用 \(n-1\) 的字符串表示。
对于相邻的两个数,
如果前面的数比后面的大,则这个位置是上升的,记为 I
反之,这个位置下降,记为 D
现在给你一个包含 I, D 和 ? 的字符串,其中 ? 表示任意
问满足条件的排列个数
考试:设 \(f_{i,j,k}\) 表示第 \(i\) 位放了 \(j\) ,状态为 \(k\) 的个数
调不出来放弃
正解:设 \(f_{i,j}\) 为第 \(i\) 位放了 \(j\) 的个数
如果第 \(i\) 位是 I ,\(f_{i,j}=\sum_{k=1}^{j-1}f_{i-1,k}\)
其他的同理。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL P=1000000007;
const int N=1005;
int n,ans;
LL s[N][N],f[N][N];
char st[N];
int main() {
scanf("%s",st+1);
n=strlen(st+1)+1;
f[1][1]=s[1][1]=1;
for(int i=2;i<=n;i++) {
for(int j=1;j<=i;j++) {
if(st[i-1]=='I')f[i][j]=s[i-1][j-1]%P;
else if(st[i-1]=='D')
f[i][j]=(s[i-1][i-1]-s[i-1][j-1]+P)%P;
else f[i][j]=s[i-1][i-1]%P;
(s[i][j]=s[i][j-1]+f[i][j])%=P;
}
}
printf("%lld",s[n][n]);
}
总结
T1:对于特别大的考虑倍增、二分等 \(\log\) 级的
T2:认真看题
T3:不要想太多
T4:状态转移需要简略、完整
2021.06.05【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.03.06【NOIP提高B组】模拟 总结
T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...
- [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 ...
- [jzoj 5778]【NOIP提高A组模拟2018.8.8】没有硝烟的战争 (博弈论+dp)
传送门 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x ...
随机推荐
- Django高级之-缓存
一 缓存介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消 ...
- Golang 源码解读 01、深入解析 strings.Builder、strings.Join
strings.Builder 源码解析. 存在意义. 实现原理. 常用方法. 写入方法. 扩容方法. String() 方法. 禁止复制. 线程不安全. io.Writer 接口. 代码. stri ...
- Java应用工程结构
分层的本质是关注点分离,隔离对下层的变化,可以简化复杂性,使得层次结构更加清晰. 1. 主流分层结构介绍 目前业界存在两种主流的应用工程结构:一种是阿里推出的<Java开发手册>中推荐的, ...
- upsource 配置git仓库时的 rsa 问题
在使用 upsource 时,当 通过 SSH-key 需要配置一个 git 仓库代码时,在使用本机已有配置的 rsa 是出现无法连接的问题.这是需要看下具体的提示,如下图的显示 其实关键的地方看这个 ...
- gin框架使用【2.RESTFUL API使用】
package mainimport ( "github.com/gin-gonic/gin")func main() { router := gin.Default() rout ...
- React 日常记录
以下是学习重点 原文地址 浏览器环境 JS解析和执行.绘制.事件处理.静态资源加载和处理 GUI渲染线程和Javascript线程 调度策略 先到先得(FCFS) 对短进程不利 对I/O密集不利 单处 ...
- JavaScript学习高级2
## DOM: * 概念: Document Object Model 文档对象模型 * 将标记语言文档的各个组成部分,封装为对象.可以使用这些对象,对标记语言文档进行CRUD ...
- Maven中央仓库地址大全
1.默认的Maven中央仓库 在Maven安装目录下,找到:/lib/maven-model-builder-${version}.jar 打开该文件,能找到超级POM:\org\apache\ma ...
- 如何基于ZEGO SDK 实现通话质量监测
如何基于ZEGO SDK 实现通话质量监测 1 功能简介 在进行视频通话过程中,用户有时候会出现网络不好的情况,比如在进行多人视频通话或者多人唱歌时,我们需要实时显示用户的网络质量. 示例源码 请参考 ...
- 【面试普通人VS高手系列】Redis和Mysql如何保证数据一致性
今天分享一道一线互联网公司高频面试题. "Redis和Mysql如何保证数据一致性". 这个问题难倒了不少工作5年以上的程序员,难的不是问题本身,而是解决这个问题的思维模式. 下面 ...