[考试反思]0916csp-s模拟测试44:可笑
出现了有史以来第一个3首杀AK啊。。。然而跟我没有丝毫关系
(曾经还是有一次考试差点就有那么一点关系的。。。)
然而反正我考得很水就是了。不是很垃圾,而是很水。
这套题是真的水。。。
T1不会证复杂度,但是A掉了,数据很难造所以对拍基本上是白打了。。。
复杂度是对的。数据很水。
T2的话想了挺久,想到要分两种情况讨论,一种简单贪心即可,另一种比较复杂。
考场上没有发现单调性于是复杂度n2了。
但是数据水的过分只要打出来第一种就行了,极其荒谬,样例都不过就能A。
当然我两种情况都打了,复杂度也没被卡。
%%%kx只打了复杂的第二种情况,但是垃圾测试点之留下了他爆搜的10分,RP++;
T3暴力dp对了但是没读入。不知怎么的反正过样例了
我自己都要笑死了。。。。
如果读入了就是230了rank2呢。。。哪里有什么如果
一定要手模样例,尤其在出题人只给了一个小样例的时候
T1:D
比较简单。做成了STL题。
用vector维护每一个因数连续出现的最早位置。用map维护每一个因数在vector里的下标。
打麻烦了。
复杂度O(n log2n)
- #include<cstdio>
- #include<vector>
- #include<map>
- using namespace std;
- vector<int>v[],p[];
- map<int,int>m;
- int gcd(int a,int b){while(b)b^=a^=b^=a%=b;return a;}
- int n,a[];long long ans;
- int main(){//freopen("1.in","r",stdin);freopen("co.out","w",stdout);
- scanf("%d",&n);
- for(int i=;i<=n;++i)scanf("%d",&a[i]);
- v[].push_back(a[]);p[].push_back();ans=a[];
- for(int i=;i<=n;++i){
- for(int j=;j<v[i&^].size();++j){
- int G=gcd(a[i],v[i&^][j]),M=m[G],P=p[i&^][j];
- if(M)P=p[i&][M-]=min(p[i&][M-],P);
- else v[i&].push_back(G),p[i&].push_back(P),m[G]=v[i&].size();
- ans=max(ans,1ll*G*(i-P+));
- }
- ans=max(ans,1ll*a[i]);
- if(m.find(a[i])==m.end())v[i&].push_back(a[i]),p[i&].push_back(i);
- m.clear();
- v[i&^].clear();p[i&^].clear();
- }
- printf("%lld\n",ans);
- }
思路积累:
- 相邻项取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)代码了。
- #include<cstdio>
- #include<algorithm>
- #include<ctime>
- using namespace std;
- struct ps{
- int w,opt;
- friend bool operator<(ps a,ps b){
- return a.w<b.w||(a.w==b.w&&a.opt>b.opt);
- }
- }p[];
- int l[],r[],n,mxmx,mxmn=1e9,mnmx,mnmn=1e9;long long ans;
- int main(){
- scanf("%d",&n);
- for(int i=;i<=n;++i)scanf("%d%d",&l[i],&r[i]);
- for(int i=;i<=n;++i)if(l[i]>r[i])l[i]^=r[i]^=l[i]^=r[i];
- 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]);
- ans=1ll*(mxmx-mxmn)*(mnmx-mnmn);
- for(int i=;i<=n;++i)p[i].w=l[i],p[n+i].w=r[i],p[i].opt=;
- sort(p+,p+n+n+);p[].opt=;
- for(int j=;p[j-].opt&&clock()<;++j){
- int mnn=p[j].w,mxx=;//printf("%d\n",mnn);
- for(int i=;i<=n;++i)if(l[i]>=mnn)mxx=max(mxx,l[i]);else mxx=max(mxx,r[i]);
- ans=min(ans,1ll*(mxmx-mnmn)*(mxx-mnn));
- }
- printf("%lld\n",ans);
- }
思路积累:
- 贪心。
- 单调指针:决策的连续性。
- 分类讨论。
T3:F
首先要想到O(n2)的dp。
刚开始是想的三维,存第几轮时两个指针分别的位置。
然而其实完成一个指令后其中一个指针一定在目标处,记录另一个指针即可。
然后dp式子可以看出是区间加,单点修改,区间取min。
第一个式子直接区间加,第二个式子就是单点取min。
因为带绝对值所以拆开,左边的问f-j,右边的问f+j,两者取min后单点修改。
线段树。过程量爆int了。
记得读入。
- #include<cstdio>
- #include<iostream>
- #include<cmath>
- using namespace std;
- #define int long long
- int w[][],cl[],cr[],n,Q,q[],b,lz[];
- void build(int p,int l,int r){
- cl[p]=l;cr[p]=r;
- if(l==r){
- if(l==b)w[p][]=,w[p][]=-l,w[p][]=l;
- else w[p][]=w[p][]=w[p][]=1e16;
- return;
- }
- build(p<<,l,l+r>>);build(p<<|,(l+r>>)+,r);
- for(int opt=;opt<=;++opt)w[p][opt]=min(w[p<<][opt],w[p<<|][opt]);
- }
- void down(int p){
- for(int opt=;opt<=;++opt)w[p<<][opt]+=lz[p],w[p<<|][opt]+=lz[p];
- lz[p<<]+=lz[p];lz[p<<|]+=lz[p];
- lz[p]=;
- }
- void set(int p,int pos,int W){
- if(cl[p]==cr[p]){
- if(W<w[p][])w[p][]=W,w[p][]=W-pos,w[p][]=W+pos;
- return;
- }
- if(lz[p])down(p);
- if(pos<=cr[p<<])set(p<<,pos,W);
- else set(p<<|,pos,W);
- for(int opt=;opt<=;++opt)w[p][opt]=min(w[p<<][opt],w[p<<|][opt]);
- }
- void add(int p,int l,int r,int W){
- if(l<=cl[p]&&cr[p]<=r){
- lz[p]+=W;
- for(int opt=;opt<=;++opt)w[p][opt]+=W;
- return;
- }
- if(lz[p])down(p);
- if(l<=cr[p<<])add(p<<,l,r,W);
- if(r>=cl[p<<|])add(p<<|,l,r,W);
- for(int opt=;opt<=;++opt)w[p][opt]=min(w[p<<][opt],w[p<<|][opt]);
- }
- int ask(int p,int l,int r,int opt){
- if(l<=cl[p]&&cr[p]<=r)return w[p][opt];
- if(lz[p])down(p);
- return min(l<=cr[p<<]?ask(p<<,l,r,opt):1e16,r>=cl[p<<|]?ask(p<<|,l,r,opt):1e16);
- }
- main(){
- scanf("%lld%lld%lld%lld",&n,&Q,&q[],&b);
- build(,,n);
- for(int i=;i<=Q;++i)scanf("%lld",&q[i]);
- for(int i=;i<=Q;++i){
- int mn1=ask(,,q[i],),mn2=ask(,q[i],n,);
- add(,,n,abs(q[i]-q[i-]));
- set(,q[i-],min(mn1+q[i],mn2-q[i]));
- }
- printf("%lld\n",ask(,,n,));
- }
思路积累:
- 线段树优化dp:把操作更新抽象为区间/单点操作,适用于第二维存值域(到现在靠自己一个都没做出来!!!)
- 拆绝对值,左右分别讨论。
[考试反思]0916csp-s模拟测试44:可笑的更多相关文章
- [考试反思]0718 NOIP模拟测试5
最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...
- 2019.9.16 csp-s模拟测试44 反思总结
虽然说好像没有什么写这个的价值OAO 来了来了来写总结了,不能怨任何东西,就是自己垃圾x 开题顺序又和主流背道而驰,先一头扎进了公认最迷的T2,瞎搞两个小时头铁出来,然后T1和T3爆炸.基础很差,全靠 ...
- csp-s模拟测试44「D·E·F」
用心出题,用脚造数据 乱搞场 1 #include<bits/stdc++.h> 2 #define re register 3 #define int long long 4 #defi ...
- [考试反思]0814NOIP模拟测试21
前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
- [考试反思]0909csp-s模拟测试41:反典
说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- [考试反思]0714/0716,NOIP模拟测试3/4
这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...
- [考试反思]1003csp-s模拟测试58:沉淀
稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...
随机推荐
- Maven配置JRE版本
Maven配置JRE版本 apache-maven-3.5.0\conf\settings.xml <profiles> <profile> <id>develop ...
- js匿名函数自执行的好处
我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量. 因为一方面局部变量会随着函数的执行结束被销毁:另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处 ...
- C#使用GUID作为随机数种子
使用C#默认的Random无参构造的next生成的随机数,在快速生成随机数的时候,会出现大批量的重复.使用guid作为随机数种子,效果会好很多 Guid temp = Guid.NewGuid(); ...
- Java9以后的垃圾回收
1: finalize() 方法 finallize() 方法是Object类的方法, 用于在类被GC回收时 做一些处理操作, 但是JVM并不能保证finalize(0 ) 方法一定被执行, 由于fi ...
- @DateTimeFormat注解
@DateTimeFormat在spring-context依赖下,所在包如下 当form表单中出现时间字段需要跟pojo对象中的成员变量进行数据绑定时,springmvc框架中的时间数据无法自动绑定 ...
- 深入理解C# 委托(delegate)-戈多编程
今天来谈谈委托,深入理解委托,本文来自各大神经验总结. 1.委托是什么? 委托类型的声明与方法签名相似. 它有一个返回值和任意数目任意类型的参数,是一种可用于封装命名方法或匿名方法的引用类型. 委托类 ...
- OSX 10.14.2 安装Cocoapods 出现问题的解决方法
今天尝试用 Cocoapods安装个第三方库.. 输入pod install, 发现 command not find. WTF! 估计是升级10.11后Cocoapods被干掉了. 我输入 sudo ...
- Linux 命令之 chmod
命令格式 chmod有以下三种格式 chmod [-cfvR] MODE[,MODE]... FILE... chmod [-cfvR] OCTAL-MODE FILE... chmod [-cfvR ...
- 【源码解析】凭什么?spring boot 一个 jar 就能开发 web 项目
问题 为什么开发web项目,spring-boot-starter-web 一个jar就搞定了?这个jar做了什么? 通过 spring-boot 工程可以看到所有开箱即用的的引导模块 spring- ...
- R-plotly|交互式甘特图(Gantt chart)-项目管理/学习计划
本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/CGz51qOjFSJ4Wx_qOMzjiw 更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号 ...