ATPの水题大赛

  声明:不是我觉得这题水,这就是本场模拟赛的名称。

  T1:求所有的$n$位数中有几个数满足:每一位要么是$A$要么是$B$,并且这个$n$位数的每一位加起来是$A$或$B$的倍数。

  $n<=100000,0<A,B<=9$且$A$与$B$不相等

  因为昨天刚讲了数位$dp$,理所当然的就往那方面去想了.其实用组合数学也可以做,而且还比较简短.

  用$f[i][j][k]$表示目前填到第$i$位,对$a$取模余数为$j$,对$b$取模余数为$k$的方案数.滚动数组,空间可以压得非常小.

  

  1. # include <cstdio>
  2. # include <iostream>
  3. # include <cstring>
  4. # include <string>
  5. # define R register int
  6. # define mod
  7.  
  8. using namespace std;
  9.  
  10. const int maxn=;
  11. int dp[][][];
  12. int a,b,n,ans,no,nex;
  13.  
  14. inline int ad (int a,int b) { a=a+b; if(a>=mod) a-=mod; return a; }
  15.  
  16. int solve ()
  17. {
  18. dp[][][]=;
  19. for (R i=;i<n;++i)
  20. {
  21. no=i&;
  22. nex=no^;
  23. memset(dp[nex],,sizeof(dp[nex]));
  24. for (R m1=;m1<a;++m1)
  25. for (R m2=;m2<b;++m2)
  26. {
  27. if(!dp[no][m1][m2]) continue;
  28. dp[nex][m1][(m2+a)%b]=ad(dp[no][m1][m2],dp[nex][m1][(m2+a)%b]);
  29. dp[nex][(m1+b)%a][m2]=ad(dp[no][m1][m2],dp[nex][(m1+b)%a][m2]);
  30. }
  31. }
  32. int ans=;
  33. for (R m1=;m1<a;++m1)
  34. for (R m2=;m2<b;++m2)
  35. if(m1==||m2==) ans=ad(ans,dp[n&][m1][m2]);
  36. return ans;
  37. }
  38.  
  39. int main()
  40. {
  41. scanf("%d%d%d",&n,&a,&b);
  42. printf("%d",solve());
  43. return ;
  44. }

T1

  T2:求逆序对数量*360。没了。 

  

  1. # include <cstdio>
  2. # include <iostream>
  3. # include <cstring>
  4. # include <string>
  5. # include <algorithm>
  6. # define R register int
  7. # define lowbit(i) (i&(-i))
  8. # define mod
  9.  
  10. using namespace std;
  11.  
  12. const int maxn=;
  13. struct nod
  14. {
  15. int key,val;
  16. }a[maxn];
  17. int n,v[maxn];
  18. int t[maxn],ans,cnt;
  19.  
  20. bool cmp (nod a,nod b) { return a.val<b.val; }
  21.  
  22. void add (int pos,int val)
  23. {
  24. for (R i=pos;i<=cnt;i+=lowbit(i)) t[i]+=val;
  25. }
  26.  
  27. int ask (int pos)
  28. {
  29. int ans=;
  30. for (R i=pos;i;i-=lowbit(i)) ans+=t[i];
  31. return ans;
  32. }
  33.  
  34. int main()
  35. {
  36. scanf("%d",&n);
  37. for (R i=;i<=n;++i)
  38. scanf("%d",&a[i].val),a[i].key=i;
  39. sort(a+,a++n,cmp);
  40. a[].val=a[].val+;
  41. for (R i=;i<=n;++i)
  42. {
  43. if(a[i].val!=a[i-].val) ++cnt;
  44. v[ a[i].key ]=cnt;
  45. }
  46. for (R i=;i<=n;++i)
  47. {
  48. ans+=ask(cnt)-ask(v[i]);
  49. if(ans>=mod) ans-=mod;
  50. add(v[i],);
  51. }
  52. ans=(long long)ans*%mod;
  53. printf("%d",ans);
  54. return ;
  55. }

T2

  T3:给定一棵正边权的树,求离每个点最远的点有多远;

  有一个定理:离每个点最远的点必然是直径端点上的一点,不过...我不是这么做的。

  以任意点为端点的最长路要么在它的子树里面,要么是从父亲走过来的,经典的$up and down$题目.注意,父亲的最长路有可能本来就是从自己这里走过去的,再用父亲来更新就会走重复的路径了.那怎么办呢?再记录一条次长路径即可,细节什么的...自己想吧。 

  

  1. # include <cstdio>
  2. # include <iostream>
  3. # include <cstring>
  4. # include <string>
  5. # define R register int
  6.  
  7. using namespace std;
  8.  
  9. const int maxn=;
  10. int n,h,x,y,co,firs[maxn],dep[maxn],m1[maxn],m2[maxn];
  11. struct edge
  12. {
  13. int too,nex,co;
  14. }g[maxn<<];
  15.  
  16. int read()
  17. {
  18. int x=,f=;
  19. char c=getchar();
  20. while (!isdigit(c)) { if(c=='-') f=-f; c=getchar(); }
  21. while (isdigit(c)) { x=(x<<)+(x<<)+(c^); c=getchar(); }
  22. return x*f;
  23. }
  24.  
  25. void add (int x,int y,int co)
  26. {
  27. g[++h].too=y;
  28. g[h].co=co;
  29. g[h].nex=firs[x];
  30. firs[x]=h;
  31. }
  32.  
  33. void upp (int x)
  34. {
  35. int j,len;
  36. for (R i=firs[x];i;i=g[i].nex)
  37. {
  38. j=g[i].too;
  39. if(dep[j]) continue;
  40. dep[j]=dep[x]+;
  41. upp(j);
  42. len=m1[j]+g[i].co;
  43. if(len>m1[x]) m2[x]=m1[x],m1[x]=len;
  44. else if(len==m1[x]) m2[x]=len;
  45. else m2[x]=max(m2[x],len);
  46. }
  47. }
  48.  
  49. void dowwn (int x)
  50. {
  51. int j,len;
  52. for (R i=firs[x];i;i=g[i].nex)
  53. {
  54. j=g[i].too;
  55. if(dep[j]<dep[x]) continue;
  56. len=m1[x];
  57. if(len==m1[j]+g[i].co) len=m2[x];
  58. len+=g[i].co;
  59. if(len>m1[j]) m1[j]=len;
  60. else if(len==m1[j]) m2[j]=len;
  61. else m2[j]=max(m2[j],len);
  62. dowwn(j);
  63. }
  64. }
  65.  
  66. int main()
  67. {
  68. n=read();
  69. for (R i=;i<n;++i)
  70. {
  71. x=read(),y=read(),co=read();
  72. add(x,y,co);
  73. add(y,x,co);
  74. }
  75. dep[]=;
  76. upp();
  77. dowwn();
  78. for (R i=;i<n;++i)
  79. printf("%d ",m1[i]);
  80. printf("%d",m1[n]);
  81. return ;
  82. }

T3

  T4:带修改动态逆序对。

  $n$为序列长度,$m$为修改次数.

  

  这题好啊,不用写代码,只需要写一个做法的$txt$,学姐看做法给分qwq.正好是只会说不会写.

  

  这个做法竟然被给了满分QAQ

  ---shzr

ATP学姐的模拟赛的更多相关文章

  1. 学军NOIP2016模拟赛1

    GTMD这么水的一套题没有AK T1:妥妥的二分答案,贪心check. T2:问题可以转化为最长上升(还是下降我记不住了)子序列. T3:发现点被覆盖上的顺序是一定的.求出这个顺序,第一个操作在线段树 ...

  2. 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

    美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...

  3. 嘉馨学姐又双叒叕来吃包子了 QDUOJ 模拟 尺度法

    嘉馨学姐又双叒叕来吃包子了 QDUOJ 模拟 尺度法 点我进入OJ题目详情 题意 给你一串数,让你求长度最长的子串,这个字串满足里面没有重复出现的数字. 解题思路 使用一个标记数组,来标记每个数的第一 ...

  4. NOIP 模拟赛 那些年,我们学过的文化课 --致已退役的fqk神犇.

    /* 这大概是我第一次整理模拟赛吧. 唉. T2打了很长时间. 一开始读错题了中间都能缩合了. 真心对不起生物老师hhh. 这种状态判重的题目还是做的太少! */ 背单词 [题目描述] fqk 退役后 ...

  5. 『2019/4/8 TGDay1模拟赛 反思与总结』

    2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...

  6. NOIP模拟赛-2018.10.22

    模拟赛 今天第一节课是历史,当然是不可能上的,一来到机房发现今天高二考试... 老师说以后可能还要给高一考...那还不如现在跟着做好了,毕竟在学长学姐中垫底显得没那么丢人 这套题风格挺奇怪的...为什 ...

  7. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

  8. 『2019/4/9 TGDay2模拟赛 反思与总结』

    2019/4/9 TGDay2模拟赛 今天是\(TG\)模拟赛的第二天了,试题难度也是相应地增加了一些,老师也说过,这就是提高组的难度了.刚开始学难的内容,一道正解也没想出来,不过基本的思路也都是对了 ...

  9. Shallwe学长的模拟赛

    NOIP Simulated Test 这个名字一听就很高端. T1:sGCD:http://uoj.ac/problem/48 题意概述:给定一个长度为$n$的序列,求$sgcd(a_1,a_i)$ ...

随机推荐

  1. vue项目webpack打包后图片路径错误

    首先项目是vue-cli搭建的,项目结构如下: 然后发现在css里写的图片引用地址在开发时正常显示,但在打包扔上服务器之后报错 报的是404,路径前面多了/static/css,不知道为啥. 在自己慢 ...

  2. Asp.Net WebForm生命周期的详解

    一.Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程 ...

  3. SQL SERVER 查看SQL语句IO,时间,索引消耗

    1.查看SQL语句IO消耗 set statistics io on     select * from dbo.jx_order where order_time>'2011-04-12 12 ...

  4. 1.Strategy Pattern(策略模式)

    策略模式(Strategy Pattern): 我的理解,将代码中每个变化之处抽出,提炼成一个一个的接口或者抽象类,让这些变化实现接口或继承抽象类成为具体的变化类.再利用多态的功能,可将变化之处用接口 ...

  5. Entity FrameWork(实体框架)是以ADO.NET Entity FrameWork ,简称为EF

    Entity FrameWork(实体框架)是以ADO.NET Entity FrameWork ,简称为EF Entity FrameWork的特点 1.支持多种数据库(MSSQL.Oracle.M ...

  6. AJAX 简单归纳 -- 前端知识

    什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...

  7. IntelliJ idea 备份与恢复

    为了防止突然断电或者电脑突然关机导致idea恢复出厂设置,需要定期备份配置. 一.备份 File---Export Settings 将settings.jar 文件导入到C:\Users\xutin ...

  8. SD从零开始03-04

    [原创]SD从零开始3 SD中的主数据 客户主数据Customer master(分层维护) 一般数据general data: 与销售和财务都有关,对所有的组织单元有效: 销售区域数据sales a ...

  9. 安卓开发_浅谈ListView(ArrayAdapter数组适配器)

    列表视图(ListView)以垂直的形式列出需要显示的列表项. 实现过程:新建适配器->添加数据源到适配器->视图加载适配器 在安卓中,有两种方法可以在屏幕中添加列表视图 1.直接用Lis ...

  10. Java Web工程搭建方法

    搭建一个简单的Web工程主要是以下几步: 一.下载所需工具 ①java   ②eclipse  ③tomcat 注意:java与eclipse版本不匹配(32位或者64位),会导致eclipse启动时 ...