T1 爬山

二分最高高度,$O(1)$判断是否可行。

  1. #include<iostream>
  2. #include<cstdio>
  3. #define ll long long
  4. using namespace std;
  5. ll n,d,a,b,ans;
  6. ll read()
  7. {
  8. ll aa=,bb=;char cc=getchar();
  9. while(cc>''||cc<''){if(cc=='-') bb=-;cc=getchar();}
  10. while(cc>=''&&cc<=''){aa=(aa<<)+(aa<<)+(cc^'');cc=getchar();}
  11. return aa*bb;
  12. }
  13. bool check(ll x)
  14. {
  15. ll ha=(x-a)/d,hb=(x-b)/d;
  16. if(d*ha<x-a) ha++;
  17. if(d*hb<x-b) hb++;
  18. if(ha+hb<=n-) return true;
  19. return false;
  20. }
  21. int main()
  22. {
  23. n=read();d=read();a=read();b=read();
  24. if(n==){
  25. printf("%lld\n",max(a,b));
  26. return ;
  27. }
  28. ll l=max(a,b),r=d*(n-),mid;
  29. while(l<=r){
  30. mid=(l+r)>>;
  31. if(check(mid)){
  32. ans=mid;
  33. l=mid+;
  34. }
  35. else r=mid-;
  36. }
  37. printf("%lld\n",ans);
  38. return ;
  39. }

爬山

T2 学数数

先离散化,用单调栈维护以一个数$x$为最大值,向左到哪,向右到哪,左$×$右就是一共有多少个区间以$x$为最大值。

用前缀和维护以$x$为最大值的区间有多少个,询问的时候$lower_bound$二分位置直接查询。

对于后$40%$的数据中,存在重复的数,那么找左右边界的时候左闭右开(左开右闭也可以),就可以避免这种情况。

记得开$long long$

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<map>
  5. #include<queue>
  6. #include<stack>
  7. #include<set>
  8. #define ll long long
  9. using namespace std;
  10. struct node
  11. {
  12. ll x,id,l,r;
  13. }h[];
  14. ll n,Q,t[],p[];
  15. stack<node>s;
  16. set<ll>st;
  17. map<ll,ll>mp;
  18. char ch[];
  19. ll read()
  20. {
  21. ll aa=,bb=;char cc=getchar();
  22. while(cc>''||cc<''){if(cc=='-') bb=-;cc=getchar();}
  23. while(cc>=''&&cc<=''){aa=(aa<<)+(aa<<)+(cc^'');cc=getchar();}
  24. return aa*bb;
  25. }
  26. bool cmp1(node a,node b)
  27. {
  28. return a.x<b.x;
  29. }
  30. bool cmp2(node a,node b)
  31. {
  32. return a.id<b.id;
  33. }
  34. int main()
  35. {
  36. //freopen("test.in","r",stdin);
  37. //freopen("4.out","w",stdout);
  38. n=read();Q=read();
  39. for(int i=;i<=n;i++){
  40. h[i].x=read();
  41. h[i].id=i;
  42. st.insert(h[i].x);
  43. }
  44. ll num=;
  45. while(st.size()){
  46. mp[*st.begin()]=++num;
  47. p[num]=*st.begin();
  48. st.erase(*st.begin());
  49. }
  50. sort(h+,h+n+,cmp1);
  51. for(int i=;i<=n;i++) h[i].x=mp[h[i].x];
  52. sort(h+,h+n+,cmp2);
  53. for(int i=;i<=n;i++){
  54. ll x=h[i].x;
  55. while(s.size()&&s.top().x<=x) s.pop();
  56. if(s.size()) h[i].l=s.top().id+;
  57. else h[i].l=;
  58. s.push(h[i]);
  59. }
  60. while(s.size()) s.pop();
  61. for(int i=n;i>=;i--){
  62. ll x=h[i].x;
  63. while(s.size()&&s.top().x<x) s.pop();
  64. if(s.size()) h[i].r=s.top().id;
  65. else h[i].r=n+;
  66. s.push(h[i]);
  67. }
  68. sort(h+,h+n+,cmp1);
  69. for(int i=;i<=n;i++){
  70. t[h[i].x]=t[h[i-].x]+(h[i].id-h[i].l+)*(h[i].r-h[i].id);
  71. }
  72. ll x;
  73. for(int i=;i<=Q;i++){
  74. scanf("%s",ch);x=read();
  75. ll pos=lower_bound(p+,p+num+,x)-p;
  76. if(ch[]=='>'){
  77. if(p[pos]==x) printf("%lld\n",t[num]-t[pos]);
  78. else printf("%lld\n",t[num]-t[pos-]);
  79. }
  80. if(ch[]=='='){
  81. if(p[pos]==x) printf("%lld\n",t[pos]-t[pos-]);
  82. else puts("");
  83. }
  84. if(ch[]=='<'){
  85. if(p[pos]==x) printf("%lld\n",t[pos-]);
  86. else printf("%lld\n",t[pos-]);
  87. }
  88. }
  89. return ;
  90. }

学数数

T3 七十和十七

设$f[i]$为长度为$i$的序列(不是排列)中计数器的大小。假设现在已知$f[i-1]$

那么第$i$位与前面的相对大小关系一共有i种

1.第$i$位相对大小为i,对计数器没有任何影响,直接转移 $f[i]=f[i-1]$

2.第$i$位相对大小小于$i$ (即$1~i-1$),设为$j$,那么计数器的值就需要增加$2^{j-1}$ (可以拿几个数试一下),对于前$i-1$个数,他们的顺序有$(i-1)!$种,所以$ f[i]=f[i-1]+2^{j-1}*(i-1)!$

综上,

$f[i]=f[i-1]+(f[i-1]+2^{1-1}*(i-1)!)+(f[i-1]+2^{2-1}*(i-1)!)+(f[i-1]+2^{3-1}*(i-1)!)...+(f[i-1]+2^{i-1-1}*(i-1)!)$

发现$2$的多少次方是一个等比数列,可以直接用前$i-1$项和公式求出来,剩下$i$个$f[i-1]$相加

最终得到$f[i]=f[i-1]*i+(2^{i-1}-1)*(i-1)!$

答案即为$f[n]/n!$

  1. #include<iostream>
  2. #include<cstdio>
  3. #define mod 1000000007
  4. #define ll long long
  5. using namespace std;
  6. ll n,ans,f[];
  7. ll quick(ll x,ll p)
  8. {
  9. ll as=;
  10. while(p){
  11. if(p&) as=as*x%mod;
  12. x=x*x%mod;
  13. p>>=;
  14. }
  15. return as;
  16. }
  17. int main()
  18. {
  19. scanf("%lld",&n);
  20. ll sum=,tot=;
  21. for(ll i=;i<=n;i++){
  22. f[i]=(f[i-]*i%mod+(tot-)*sum%mod)%mod;
  23. tot=tot*%mod;
  24. sum=sum*i%mod;
  25. }
  26. printf("%lld\n",f[n]*quick(sum,mod-)%mod);
  27. return ;
  28. }

七十和十七

8.22 NOIP模拟测试29(B) 爬山+学数数+七十和十七的更多相关文章

  1. NOIP模拟测试29「爬山·学数数·七十和十七」

    爬山题解不想写了 学数数 离散化然后找到以每一个值为最大值的连续子段有多少个,然后开个桶维护 那么怎么找以每一个值为最大值的连续子段个数 方法1(我的极笨的方法) 考试时我的丑陋思路, 定义极左值为左 ...

  2. NOIP模拟测试29(A)

    T1: 题目大意:有一张有向无环图,第$x$次经过边$i$的代价为$a_ix+b_i$,最多经过$c_i$次,起点为1,$s$个点可作为终点,求走$k$次的最小代价. 我们新建一个汇点,将所有可做为终 ...

  3. 「题解」NOIP模拟测试题解乱写I(29-31)

    NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...

  4. 8.22 NOIP 模拟题

      8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...

  5. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  6. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  7. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

  8. 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

    2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...

  9. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

随机推荐

  1. springboot2 中Druid和ibatis(baomidou) 遇到org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.iflytek.pandaai.service.multi.mapper.TanancyMapper

    调用mapper中任何方法都会出现类似的错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not foun ...

  2. FaaS(函数即服务) + BaaS(后台即服务)

    作者 | 黄子毅(紫益) 阿里前端技术专家 导读:前端开发者是最早享受到 “Serverless” 好处的群体,因为浏览器就是一个开箱即用.甚至无需为计算付费的环境!Serverless 把前端开发体 ...

  3. 论文阅读: v-charge项目: 电动车的自动泊车和充电

    Abstract AVP服务会缓和电动车现有两个缺点: 有限的行驶范围和很长的充电时间. v-charge用相机和超声波在GPS-denied的区域全自动形式. 这篇paper叙述了下述几方面的优势: ...

  4. python正则图片爬取

    # conding:utf8 import requests import re import time if __name__ == "__main__": # 所有的数据 ur ...

  5. 休谟:《人性论》一书中提出的要重视"是"与"应该"的区别

    "价值"最初是经济学的范畴,指的是经济价值.商品价值.价值作的为一个哲学概念,首先大概是由18 世纪的英国哲学家休谟(David H ume,1711-1776)提出的.他于173 ...

  6. 在进行机器学习建模时,为什么需要验证集(validation set)?

    在进行机器学习建模时,为什么需要评估集(validation set)? 笔者最近有一篇文章被拒了,其中有一位审稿人提到论文中的一个问题:”应该在验证集上面调整参数,而不是在测试集“.笔者有些不明白为 ...

  7. linq,sqlmethods,like

    LINQ to SQL will translate .NET methods in this manner: text.StartsWith(...) = LIKE ...% text.Contai ...

  8. RSA应用指数与模生成公钥(ArcGIS Server)

    参考: https://www.cnblogs.com/luo30zhao/p/10515594.html https://blog.csdn.net/skiof007/article/details ...

  9. memory一致性模型

    https://homes.cs.washington.edu/~bornholt/post/memory-models.html https://www.cs.cmu.edu/afs/cs/acad ...

  10. 【原】通过Spring结合Cglib处理非接口代理

    前言: 之前做的一个项目,虽然是查询ES,但内部有大量的逻辑计算,非常耗时,而且经常收到JVM峰值告警邮件.分析了一下基础数据每天凌晨更新一次,但查询和计算其实在第一次之后就可以写入缓存,这样后面直接 ...