出现了有史以来第一个3首杀AK啊。。。然而跟我没有丝毫关系

(曾经还是有一次考试差点就有那么一点关系的。。。)

然而反正我考得很水就是了。不是很垃圾,而是很水。

这套题是真的水。。。

T1不会证复杂度,但是A掉了,数据很难造所以对拍基本上是白打了。。。

复杂度是对的。数据很水。

T2的话想了挺久,想到要分两种情况讨论,一种简单贪心即可,另一种比较复杂。

考场上没有发现单调性于是复杂度n2了。

但是数据水的过分只要打出来第一种就行了,极其荒谬,样例都不过就能A。

当然我两种情况都打了,复杂度也没被卡。

%%%kx只打了复杂的第二种情况,但是垃圾测试点之留下了他爆搜的10分,RP++;

T3暴力dp对了但是没读入。不知怎么的反正过样例了

我自己都要笑死了。。。。

如果读入了就是230了rank2呢。。。哪里有什么如果

一定要手模样例,尤其在出题人只给了一个小样例的时候

T1:D

比较简单。做成了STL题。

用vector维护每一个因数连续出现的最早位置。用map维护每一个因数在vector里的下标。

打麻烦了。

复杂度O(n log2n)

  1. #include<cstdio>
  2. #include<vector>
  3. #include<map>
  4. using namespace std;
  5. vector<int>v[],p[];
  6. map<int,int>m;
  7. int gcd(int a,int b){while(b)b^=a^=b^=a%=b;return a;}
  8. int n,a[];long long ans;
  9. int main(){//freopen("1.in","r",stdin);freopen("co.out","w",stdout);
  10. scanf("%d",&n);
  11. for(int i=;i<=n;++i)scanf("%d",&a[i]);
  12. v[].push_back(a[]);p[].push_back();ans=a[];
  13. for(int i=;i<=n;++i){
  14. for(int j=;j<v[i&^].size();++j){
  15. int G=gcd(a[i],v[i&^][j]),M=m[G],P=p[i&^][j];
  16. if(M)P=p[i&][M-]=min(p[i&][M-],P);
  17. else v[i&].push_back(G),p[i&].push_back(P),m[G]=v[i&].size();
  18. ans=max(ans,1ll*G*(i-P+));
  19. }
  20. ans=max(ans,1ll*a[i]);
  21. if(m.find(a[i])==m.end())v[i&].push_back(a[i]),p[i&].push_back(i);
  22. m.clear();
  23. v[i&^].clear();p[i&^].clear();
  24. }
  25. printf("%lld\n",ans);
  26. }

思路积累:

  • 相邻项取gcd以取代枚举所有因子
  • 只保存较大的因子,让较大的因子在后面需要的时候再分解成小因子

T2:E

两种情况。所有球里面的最大值$T_{max}$和最小值$T_{min}$要么是不同的颜色,要么在一起。

对于第一种情况式子是$(T_{max} - R_{min})*(B_{max} - T_{min})$

那么就把大的求放进左边,小的放进右边。

第二种情况是$(T_{max} - T_{min})*(R_{max} - R_{min})$

这时候左边就相当于垃圾桶,所有不要的值都往里面扔就是了。

目标就是在每一对球里选一个,使选出的球极差尽量小。

枚举$R_{min}$在考虑我们能否进行决策。

那就是如果一对球里小的那一个大于等于$R_{min}$那么就选小的,否则就选大的。

如果大的球也比$R_{min}$小那么这个就不合法了,更大的$R_{min}$也就不合法了。跳出。

这是O(n2)的。

但是如果我们从小到大枚举$R_{min}$的话,可以发现决策的变化就是把几个小球变成了大球。

那么每对球至多变化一次,单调指针扫的话总复杂度O(n)。

粘考场的O(n2)代码了。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<ctime>
  4. using namespace std;
  5. struct ps{
  6. int w,opt;
  7. friend bool operator<(ps a,ps b){
  8. return a.w<b.w||(a.w==b.w&&a.opt>b.opt);
  9. }
  10. }p[];
  11. int l[],r[],n,mxmx,mxmn=1e9,mnmx,mnmn=1e9;long long ans;
  12. int main(){
  13. scanf("%d",&n);
  14. for(int i=;i<=n;++i)scanf("%d%d",&l[i],&r[i]);
  15. for(int i=;i<=n;++i)if(l[i]>r[i])l[i]^=r[i]^=l[i]^=r[i];
  16. for(int i=;i<=n;++i)mxmx=max(mxmx,r[i]),mxmn=min(mxmn,r[i]),mnmx=max(mnmx,l[i]),mnmn=min(mnmn,l[i]);
  17. ans=1ll*(mxmx-mxmn)*(mnmx-mnmn);
  18. for(int i=;i<=n;++i)p[i].w=l[i],p[n+i].w=r[i],p[i].opt=;
  19. sort(p+,p+n+n+);p[].opt=;
  20. for(int j=;p[j-].opt&&clock()<;++j){
  21. int mnn=p[j].w,mxx=;//printf("%d\n",mnn);
  22. for(int i=;i<=n;++i)if(l[i]>=mnn)mxx=max(mxx,l[i]);else mxx=max(mxx,r[i]);
  23. ans=min(ans,1ll*(mxmx-mnmn)*(mxx-mnn));
  24. }
  25. printf("%lld\n",ans);
  26. }

思路积累:

  • 贪心。
  • 单调指针:决策的连续性。
  • 分类讨论。

T3:F

首先要想到O(n2)的dp。

刚开始是想的三维,存第几轮时两个指针分别的位置。

然而其实完成一个指令后其中一个指针一定在目标处,记录另一个指针即可。

然后dp式子可以看出是区间加,单点修改,区间取min。

第一个式子直接区间加,第二个式子就是单点取min。

因为带绝对值所以拆开,左边的问f-j,右边的问f+j,两者取min后单点修改。

线段树。过程量爆int了。

记得读入。

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cmath>
  4. using namespace std;
  5. #define int long long
  6. int w[][],cl[],cr[],n,Q,q[],b,lz[];
  7. void build(int p,int l,int r){
  8. cl[p]=l;cr[p]=r;
  9. if(l==r){
  10. if(l==b)w[p][]=,w[p][]=-l,w[p][]=l;
  11. else w[p][]=w[p][]=w[p][]=1e16;
  12. return;
  13. }
  14. build(p<<,l,l+r>>);build(p<<|,(l+r>>)+,r);
  15. for(int opt=;opt<=;++opt)w[p][opt]=min(w[p<<][opt],w[p<<|][opt]);
  16. }
  17. void down(int p){
  18. for(int opt=;opt<=;++opt)w[p<<][opt]+=lz[p],w[p<<|][opt]+=lz[p];
  19. lz[p<<]+=lz[p];lz[p<<|]+=lz[p];
  20. lz[p]=;
  21. }
  22. void set(int p,int pos,int W){
  23. if(cl[p]==cr[p]){
  24. if(W<w[p][])w[p][]=W,w[p][]=W-pos,w[p][]=W+pos;
  25. return;
  26. }
  27. if(lz[p])down(p);
  28. if(pos<=cr[p<<])set(p<<,pos,W);
  29. else set(p<<|,pos,W);
  30. for(int opt=;opt<=;++opt)w[p][opt]=min(w[p<<][opt],w[p<<|][opt]);
  31. }
  32. void add(int p,int l,int r,int W){
  33. if(l<=cl[p]&&cr[p]<=r){
  34. lz[p]+=W;
  35. for(int opt=;opt<=;++opt)w[p][opt]+=W;
  36. return;
  37. }
  38. if(lz[p])down(p);
  39. if(l<=cr[p<<])add(p<<,l,r,W);
  40. if(r>=cl[p<<|])add(p<<|,l,r,W);
  41. for(int opt=;opt<=;++opt)w[p][opt]=min(w[p<<][opt],w[p<<|][opt]);
  42. }
  43. int ask(int p,int l,int r,int opt){
  44. if(l<=cl[p]&&cr[p]<=r)return w[p][opt];
  45. if(lz[p])down(p);
  46. return min(l<=cr[p<<]?ask(p<<,l,r,opt):1e16,r>=cl[p<<|]?ask(p<<|,l,r,opt):1e16);
  47. }
  48. main(){
  49. scanf("%lld%lld%lld%lld",&n,&Q,&q[],&b);
  50. build(,,n);
  51. for(int i=;i<=Q;++i)scanf("%lld",&q[i]);
  52. for(int i=;i<=Q;++i){
  53. int mn1=ask(,,q[i],),mn2=ask(,q[i],n,);
  54. add(,,n,abs(q[i]-q[i-]));
  55. set(,q[i-],min(mn1+q[i],mn2-q[i]));
  56. }
  57. printf("%lld\n",ask(,,n,));
  58. }

思路积累:

  • 线段树优化dp:把操作更新抽象为区间/单点操作,适用于第二维存值域(到现在靠自己一个都没做出来!!!)
  • 拆绝对值,左右分别讨论。

[考试反思]0916csp-s模拟测试44:可笑的更多相关文章

  1. [考试反思]0718 NOIP模拟测试5

    最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...

  2. 2019.9.16 csp-s模拟测试44 反思总结

    虽然说好像没有什么写这个的价值OAO 来了来了来写总结了,不能怨任何东西,就是自己垃圾x 开题顺序又和主流背道而驰,先一头扎进了公认最迷的T2,瞎搞两个小时头铁出来,然后T1和T3爆炸.基础很差,全靠 ...

  3. csp-s模拟测试44「D·E·F」

    用心出题,用脚造数据 乱搞场 1 #include<bits/stdc++.h> 2 #define re register 3 #define int long long 4 #defi ...

  4. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  5. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  6. [考试反思]0909csp-s模拟测试41:反典

    说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...

  7. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  8. [考试反思]0714/0716,NOIP模拟测试3/4

    这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...

  9. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

随机推荐

  1. Maven配置JRE版本

    Maven配置JRE版本 apache-maven-3.5.0\conf\settings.xml <profiles> <profile> <id>develop ...

  2. js匿名函数自执行的好处

    我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量. 因为一方面局部变量会随着函数的执行结束被销毁:另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处 ...

  3. C#使用GUID作为随机数种子

    使用C#默认的Random无参构造的next生成的随机数,在快速生成随机数的时候,会出现大批量的重复.使用guid作为随机数种子,效果会好很多 Guid temp = Guid.NewGuid(); ...

  4. Java9以后的垃圾回收

    1: finalize() 方法 finallize() 方法是Object类的方法, 用于在类被GC回收时 做一些处理操作, 但是JVM并不能保证finalize(0 ) 方法一定被执行, 由于fi ...

  5. @DateTimeFormat注解

    @DateTimeFormat在spring-context依赖下,所在包如下 当form表单中出现时间字段需要跟pojo对象中的成员变量进行数据绑定时,springmvc框架中的时间数据无法自动绑定 ...

  6. 深入理解C# 委托(delegate)-戈多编程

    今天来谈谈委托,深入理解委托,本文来自各大神经验总结. 1.委托是什么? 委托类型的声明与方法签名相似. 它有一个返回值和任意数目任意类型的参数,是一种可用于封装命名方法或匿名方法的引用类型. 委托类 ...

  7. OSX 10.14.2 安装Cocoapods 出现问题的解决方法

    今天尝试用 Cocoapods安装个第三方库.. 输入pod install, 发现 command not find. WTF! 估计是升级10.11后Cocoapods被干掉了. 我输入 sudo ...

  8. Linux 命令之 chmod

    命令格式 chmod有以下三种格式 chmod [-cfvR] MODE[,MODE]... FILE... chmod [-cfvR] OCTAL-MODE FILE... chmod [-cfvR ...

  9. 【源码解析】凭什么?spring boot 一个 jar 就能开发 web 项目

    问题 为什么开发web项目,spring-boot-starter-web 一个jar就搞定了?这个jar做了什么? 通过 spring-boot 工程可以看到所有开箱即用的的引导模块 spring- ...

  10. R-plotly|交互式甘特图(Gantt chart)-项目管理/学习计划

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/CGz51qOjFSJ4Wx_qOMzjiw 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...