T1

题意:给你一个 \(n\) 个点 \(n\) 条边的有向图,

求每个店经过 \(K\) 条边后的边权和、最小边权

\(K\le 10^{10}\)

考试时:一直想着环,结果一直不知道怎么做

正解:倍增预处理出经过 \(2^r\) 条边的终点和最大值、最小值

然后直接查询即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const int N=100005;
  5. int n,up,to[N][40],mn[N][40],mnn;
  6. LL sm[N][40],K,sum,tmp;
  7. int main() {
  8. scanf("%d%lld",&n,&K),up=log2(K)+1;
  9. for(int i=0;i<n;i++)scanf("%d",&to[i][0]);
  10. for(int i=0;i<n;i++)scanf("%d",&mn[i][0]),sm[i][0]=1LL*mn[i][0];
  11. for(int j=1;j<=up;j++)
  12. for(int i=0;i<n;i++) {
  13. to[i][j]=to[to[i][j-1]][j-1];
  14. mn[i][j]=min(mn[i][j-1],mn[to[i][j-1]][j-1]);
  15. sm[i][j]=sm[i][j-1]+sm[to[i][j-1]][j-1];
  16. }
  17. for(int i=0,u;i<n;i++) {
  18. u=i,tmp=K,sum=0,mnn=INT_MAX;
  19. for(int j=up;~j;j--) {
  20. if(tmp>=(1ll<<j)) {
  21. sum+=sm[u][j];
  22. mnn=min(mnn,mn[u][j]);
  23. u=to[u][j];
  24. tmp-=(1ll<<j);
  25. }
  26. }
  27. printf("%lld %d\n",sum,mnn);
  28. }
  29. }

T2

题意:求 \(n\) 所有的原根,如果 \(Ord_n(a)=\varphi(n)\) 则 \(a\) 是 \(n\) 的原根

其中 \(Ord_n(a)\) 是满足 \(a^d\equiv 1\pmod n\) 的最小的 \(d\)

比赛时:直接暴力,但是怕超时改了范围,结果 Wa

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int gcd(int a,int b) {
  4. return b?gcd(b,a%b):a;
  5. }
  6. int n,rh,fl;
  7. inline int Ord(int a) {
  8. register int b=1;
  9. for(int i=1;i<=rh;i++) {
  10. b=b*a%n;
  11. if(b==1%n)return i;
  12. }
  13. return -1;
  14. }
  15. int main() {
  16. freopen("math.in","r",stdin);
  17. freopen("math.out","w",stdout);
  18. scanf("%d",&n);
  19. for(int i=1;i<=n;i++)
  20. rh+=(gcd(i,n)==1);
  21. for(int i=1;i<=n;i++)
  22. if(gcd(i,n)==1 && Ord(i)==rh)
  23. printf("%d\n",i),fl=1;
  24. if(!fl)puts("-1");
  25. }

T3

题意:给你一颗有根树,保证一个点除了根节点以外的点都有唯一父亲

问有多少棵子树满足里面的结点是个连续的区间

考试:记录子树的最大值和最小值,然后用判断个数是否等于 \(mx-mn+1\)

正解:就是如此

细节炸了

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=100005;
  4. int n,ans,sz[N],mn[N],mx[N],rd[N],lst[N],nxt[N<<1],to[N<<1],cnt;
  5. inline void Ae(int fr,int go) { to[++cnt]=go,nxt[cnt]=lst[fr],lst[fr]=cnt; }
  6. void dfs(int u,int f) {
  7. mn[u]=mx[u]=u,sz[u]=1;
  8. for(int i=lst[u],v;i;i=nxt[i])
  9. if((v=to[i])^f) {
  10. dfs(v,u);
  11. mn[u]=min(mn[u],mn[v]);
  12. mx[u]=max(mx[u],mx[v]);
  13. sz[u]+=sz[v];
  14. }
  15. if(sz[u]==mx[u]-mn[u]+1)
  16. ++ans;
  17. }
  18. int main() {
  19. scanf("%d",&n);
  20. for(int i=1,u,v;i<n;i++) {
  21. scanf("%d%d",&u,&v);
  22. Ae(u,v),++rd[v];
  23. }
  24. for(int i=1;i<=n;i++)
  25. if(!rd[i]) { dfs(i,i); break; }
  26. printf("%d",ans);
  27. }

T4

题意:一个长度为 \(n\) 的排列,可以用 \(n-1\) 的字符串表示。

对于相邻的两个数,

如果前面的数比后面的大,则这个位置是上升的,记为 I

反之,这个位置下降,记为 D

现在给你一个包含 ID? 的字符串,其中 ? 表示任意

问满足条件的排列个数

考试:设 \(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}\)

其他的同理。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const LL P=1000000007;
  5. const int N=1005;
  6. int n,ans;
  7. LL s[N][N],f[N][N];
  8. char st[N];
  9. int main() {
  10. scanf("%s",st+1);
  11. n=strlen(st+1)+1;
  12. f[1][1]=s[1][1]=1;
  13. for(int i=2;i<=n;i++) {
  14. for(int j=1;j<=i;j++) {
  15. if(st[i-1]=='I')f[i][j]=s[i-1][j-1]%P;
  16. else if(st[i-1]=='D')
  17. f[i][j]=(s[i-1][i-1]-s[i-1][j-1]+P)%P;
  18. else f[i][j]=s[i-1][i-1]%P;
  19. (s[i][j]=s[i][j-1]+f[i][j])%=P;
  20. }
  21. }
  22. printf("%lld",s[n][n]);
  23. }

总结

T1:对于特别大的考虑倍增、二分等 \(\log\) 级的

T2:认真看题

T3:不要想太多

T4:状态转移需要简略、完整

2021.06.05【NOIP提高B组】模拟 总结的更多相关文章

  1. 5820. 【NOIP提高A组模拟2018.8.16】 非法输入(模拟,字符串)

    5820. [NOIP提高A组模拟2018.8.16] 非法输入 (File IO): input:aplusb.in output:aplusb.out Time Limits: 1000 ms   ...

  2. 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  ...

  3. 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 ...

  4. 2021.03.06【NOIP提高B组】模拟 总结

    T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...

  5. [JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

  6. [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动

    Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...

  7. 【NOIP提高A组模拟2018.8.14】 区间

    区间加:差分数组修改 O(n)扫描,负数位置单调不减 #include<iostream> #include<cstring> #include<cstdio> # ...

  8. [jzoj 5782]【NOIP提高A组模拟2018.8.8】 城市猎人 (并查集按秩合并+复杂度分析)

    传送门 Description 有n个城市,标号为1到n,修建道路花费m天,第i天时,若gcd(a,b)=m-i+1,则标号为a的城市和标号为b的城市会建好一条直接相连的道路,有多次询问,每次询问某两 ...

  9. [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)

    传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...

  10. [jzoj 5778]【NOIP提高A组模拟2018.8.8】没有硝烟的战争 (博弈论+dp)

    传送门 Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x ...

随机推荐

  1. [ Skill ] 为什么 Lisp 语言如此先进

    https://www.cnblogs.com/yeungchie/ 网上看到一个应该是 2002 年的文章 译文转自:为什么Lisp语言如此先进?(译文) - 阮一峰的网络日志 原文地址:Reven ...

  2. linux中查看端口号使用情况

    百度一圈,以下是整理来的操作命令. 1.netstat -anp |grep (端口号) 这个方法可以直观看到对应端口号是否被使用. 2.netstat -nultp 这个方法可以看到该机上所有以用的 ...

  3. MySQL发展历史

    MySQL(发音为"my ess cue el")是一种关系型数据库管理系统, MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Su ...

  4. 10. MySQL基础-02条件查询、排序查询

    2. 条件查询 语法 ​ select 查询列表 from 表名 where 筛选条件: 分类 按条件表达式筛选 简单的条件运算符:> < = != <> >= ⇐ 按逻 ...

  5. 结合手工注入编写一个SQL盲注脚本——以SQLi-Labs less16为例

    一.分析测试注入点 1.抓包,查看响应数据包 2.先随便输入一个账号密码,再测试万能密码 1") or 1=1 -- # 3.发现响应数据包的Content-Length字段值不同.错误状态 ...

  6. 7.Jenkins进阶之流水线pipeline语法入门学习(2)

    目录一览: (2) Declarative Pipeline Syntax 2.1) Sections - 章节 2.2) Directives - 指令 2.3) Sequential Stages ...

  7. hadoop 运行测试

    hadoop集群运行 需要提前配置配置文件 slave节点用户得是hadoop,/usr/local/src的所有文件得属于hadoop 三台虚拟机关闭setenforce与防火墙,并且配置域名解析 ...

  8. 将Excel数据转换为Java可识别时间(Date、Timestamp)

    引言 Excel的时间,POI读取到的是double,这个值不是timestamp.需要进行一些转换,将它转换为Date或者Timestamp. Excel中的日期数据: 程序中读取到的数据: 如何转 ...

  9. c++:-3

    上一节学习了C++的函数:c++:-2,本节学习C++的数组.指针和字符串 数组 定义和初始化 定义 例如:int a[10]; 表示a为整型数组,有10个元素:a[0]...a[9] 例如: int ...

  10. pyhon对excel的xls与xlsx的读取,写入

    import shutilimport osfrom openpyxl import load_workbookfrom xlutils.copy import copyimport win32com ...