A.Blue

出题人大概已经去为国家处理积压子弹了?

贪心,让每一只青蛙(我怂行吧)都尽量往远跳,能到达的最远的被踩了就跳次远的,以此类推。可以维护一个单调队列,表示每只青蛙的位置(开始都是0)。然后按顺序扫一遍每个石头,如果队首的青蛙不能跳过去就放弃它直接pop掉,如果能跳就把石头位置从队尾push进去并pop掉队首的旧位置,最后队列的size就是答案。因为你肯定不能可着一个青蛙往前跳,必须尽量不让任何一只掉队,所以一只跳完之后把它丢到队尾。

比较神奇的是这道题用STL会比手写队列快300ms??

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e6+5;
int T,n,m,D,L;
int a[N];
void work()
{cin>>n>>m>>D>>L;for(int i=1;i<=n;i++)cin>>a[i];a[n+1]=L;deque<int> q;for(int i=1;i<=m;i++)q.push_back(0);for(int i=1;i<=n+1;i++){while(!q.empty()&&q.front()+D<a[i])q.pop_front();q.push_back(a[i]);q.pop_front();}if(q.size()==m)puts("Excited");else printf("%d\n",q.size());
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cin>>T;while(T--)work();return 0;
}

STL:deque

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e6+5;
int T,n,m,D,L;
int a[N],q[N];
void work()
{cin>>n>>m>>D>>L;for(int i=1;i<=n;i++)cin>>a[i];a[n+1]=L;memset(q,0,sizeof(q));int head=1,tail=m;for(int i=1;i<=n+1;i++){while(head<=tail&&q[head]+D<a[i])head++;q[++tail]=a[i];head++;}if(tail-head+1==m)puts("Excited");else printf("%d\n",tail-head+1);
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cin>>T;while(T--)work();return 0;
}

数组

B.Weed

好题,先咕着

用线段树维护操作的题还是第一次见

线段树上的区间指的是一段连续的操作区间,而不是实际的序列

维护$add$(加了多少层)$del$(删了多少层)$sum$(有多少量)$lsum(被兄弟删除后的量,仅对左儿子维护)$

$up()$的时候如果左儿子不够右儿子删,直接清0即可。但要是右儿子删不完左儿子就很麻烦了。需要专门设计一个函数计算当前区间中删了x个元素的和。

(于是我又懒癌发作了)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int read()
{int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0',ch=getchar();}return x*f;
}
const int N=2e5+55;
#define ls(k) k<<1
#define rs(k) k<<1|1
int m,Q;
struct ques
{int op,val;
}q[N];
int del[N<<2],add[N<<2],lsum[N<<2],sum[N<<2];
int query(int k,int val)
{if(val==add[rs(k)])return lsum[ls(k)];if(val>add[rs(k)])return query(ls(k),val-add[rs(k)]+del[rs(k)]);if(val<add[rs(k)])return lsum[ls(k)]+query(rs(k),val);
}
void up(int k)
{if(add[ls(k)]<=del[rs(k)]){lsum[ls(k)]=0;sum[k]=sum[rs(k)];add[k]=add[rs(k)];del[k]=del[rs(k)]+del[ls(k)]-add[ls(k)];}else{del[k]=del[ls(k)];add[k]=add[ls(k)]+add[rs(k)]-del[rs(k)];if(del[rs(k)])lsum[ls(k)]=query(ls(k),del[rs(k)]);else lsum[ls(k)]=sum[ls(k)];sum[k]=sum[rs(k)]+lsum[ls(k)];}
}
void build(int k,int l,int r)
{if(l==r){if(q[l].op==0)add[k]=1,sum[k]=lsum[k]=q[l].val;else del[k]=q[l].val;return ;}int mid=l+r>>1;build(ls(k),l,mid);build(rs(k),mid+1,r);up(k);
}
void update(int k,int l,int r,int pos,int op,int val)
{if(l==r){lsum[k]=add[k]=sum[k]=del[k]=0;if(op)del[k]=val;elseadd[k]=1,sum[k]=lsum[k]=val;return ;}int mid=l+r>>1;if(pos<=mid)update(ls(k),l,mid,pos,op,val);else update(rs(k),mid+1,r,pos,op,val);up(k);
}
int main()
{/*freopen("weed.in","r",stdin);freopen("my.out","w",stdout);*/m=read();Q=read();for(int i=1;i<=m;i++)q[i].op=read(),q[i].val=read();build(1,1,m);for(int i=1;i<=Q;i++){int num=read(),op=read(),val=read();update(1,1,m,num,op,val);printf("%d\n",sum[1]);}return 0;
}

View Code

C.Drink

没有打恶心至极的大常数正解,其实优化暴力+卡常跑出来和正解的时间相差无几。

%%%WHS式循环展开 TQL 帅过WYS

优化暴力的思路就是每层矩形只枚举最上面的那条边上的点,因为有了这条边上一个点的坐标就可以完成矩形上四个点的旋转,所以只枚举一条边上的点就能完成整个矩形的旋转。

然后调整边长和左上角坐标,对每层矩形都来一遍就好了。复杂度其实相比最暴力的没有变,但是循环次数少了,相当于一种循环展开。

当然还要稍作卡常,$int$转$char$  $getchar$读入  $putchar$输出啥的

#include<cstdio>
#include<iostream>
#include<cstring>
#define re register
using namespace std;
const int N=3005;
int n,m,Q,x,y,c;
char a[N][N],b[N][N];
inline int read()
{re int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*f;
}
int main()
{n=read();m=read();Q=read();for(re int i=1;i<=n;i++)for(re int j=1;j<=m;j++){a[i][j]=getchar();while(!isdigit(a[i][j]))a[i][j]=getchar();}while(Q--){x=read();y=read();c=read();for( ;c>1;c-=2,x++,y++){re int L=y,U=x,D=x+c-1,R=y+c-1;for(re int i=0;i<=c-2;i++){char old=a[U+i][R];a[U+i][R]=a[U][L+i];a[U][L+i]=a[D-i][L];a[D-i][L]=a[D][R-i];a[D][R-i]=old;}}}for(re int i=1;i<=n;i++){for(re int j=1;j<=m;j++)putchar(a[i][j]),putchar(' ');putchar('\n');}return 0;
}

View Code

转载于:https://www.cnblogs.com/Rorschach-XR/p/11333782.html

[NOIP模拟16]题解相关推荐

  1. [NOIP]模拟17 题解

    A.入阵曲 部分分很肥,正解写得常数稍大就会和暴力一个分,考试的时候写什么自己考虑.(滑稽 部分分的循环边界手抖写错了-25 (原本暴力分中的10分都没了啊啊啊) 没写挂的话应该有75,其实就是二维前 ...

  2. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  3. NOIP 模拟赛 长寿花 题解

    NOIP 模拟赛 长寿花 题解 要放 \(n\) 层物品,第 \(i\) 层有 \(a_i\) 个位置放物品,物品有 \(m\) 中颜色,有约束条件: 同一层两个相邻物品颜色不能相同. 相邻两层颜色集 ...

  4. NOIP模拟赛 四校联考 递推 + 分类讨论 + 树上期望

    NOIP 模拟题 题目名称兔子被子蚊子 源程序文件名rabbit.cpp quilt.cpp mosquito.cpp 输入文件名rabbit.in quilt.in mosquito.in 输出文件 ...

  5. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对 描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们安排 ...

  6. 闵梓轩大佬のnoip模拟题D1 总结 2017/10/26

    背景 题目概括 T1 题面 分析 90分算法 满分算法 T2 题面 分析 部分分算法 满分算法 满分代码 T3 题面 分析 代码 总结 背景 这道题目是去年的金牌大佬闵梓轩在一年前出的一套noip模拟 ...

  7. Noip 模拟练习5

    Noip 模拟练习5 满分300,本人240.修正后300. 难度中等. 太空密码 Description 人类一直致力于探索地外文明,为此科学家们建造了一个巨大的射电望远镜 用于接收宇宙射线.一天从 ...

  8. 辣鸡(ljh) NOIP模拟赛 模拟 平面几何 数论 化学相关(雾)

    [题目描述] 辣鸡ljhNOI之后就退役了,然后就滚去学文化课了. 然而在上化学课的时候,数学和化学都不好的ljh却被一道简单题难住了,受到了大佬的嘲笑. 题目描述是这样的:在一个二维平面上有一层水分 ...

  9. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

最新文章

  1. 一个已经存在 10 年,却被严重低估的库!
  2. Python 之 Matplotlib (四)图例
  3. Stanford UFLDL教程 稀疏编码
  4. usb打印机命令_打印机脱机怎么办 打印机脱机解决方法【详解】
  5. bwlabel算法_bwlabel函数的c++实现
  6. adf可以自定义溶剂吗_ADF Faces。 立即的自定义客户端事件
  7. mgg mysql_mgg文件怎么转换mp3格式?
  8. java使用Websocket获取HttpSession出现的问题与解决
  9. html网页url伪静态,动态url 静态url 伪静态url页面的区别
  10. 计算机应用助手工程师,通信工程师备考助手
  11. 雷赛控制卡总线方式的坑
  12. Python3截图识字工具
  13. Youtube 开发通过遥控机控制实现快进快退功能
  14. ARM学习系列 ---- ARM公司简介
  15. _,predicted=中_,的作用
  16. Daemon Tools 4.x 或SPTD.SYS导致Windows不能启动的问题的解决方案
  17. centos搭建流媒体服务器
  18. 响应式极简新闻发布系统源码
  19. 6.28(HTML2)
  20. IOS开发学习笔记(一)

热门文章

  1. oracle 抽样_利用ORACLE实现数据抽样(sample block)
  2. OSG学习:OSG组成(二)——渲染状态和纹理映射
  3. 计算机系统结构 外文,计算机系统结构外文文献 计算机系统结构参考文献怎么写...
  4. 'wx' is not defined no-undef
  5. Android手机设备唯一标识符
  6. OpenGL中phong光照模型详解
  7. 回路、简单回路、简单路径
  8. linux pannel 误删除后的恢复方法
  9. Invalid row number (65536) outside allowable range (0..65535)
  10. 《疯狂农场》带来的启示