A.Blue

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

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

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

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N=1e6+;
int T,n,m,D,L;
int a[N];
void work()
{
cin>>n>>m>>D>>L;
for(int i=;i<=n;i++)
cin>>a[i];
a[n+]=L;
deque<int> q;
for(int i=;i<=m;i++)q.push_back();
for(int i=;i<=n+;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();
cin>>T;
while(T--)work();
return ;
}

STL:deque

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

数组

B.Weed

好题,先咕着

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

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

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

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

(于是我又懒癌发作了)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=x*+ch-'',ch=getchar();}
return x*f;
}
const int N=2e5+;
#define ls(k) k<<1
#define rs(k) k<<1|1
int m,Q;
struct ques
{
int op,val;
}q[N];
int del[N<<],add[N<<],lsum[N<<],sum[N<<];
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)]=;
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==)add[k]=,sum[k]=lsum[k]=q[l].val;
else del[k]=q[l].val;
return ;
}
int mid=l+r>>;
build(ls(k),l,mid);build(rs(k),mid+,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]=;
if(op)
del[k]=val;
else
add[k]=,sum[k]=lsum[k]=val;
return ;
}
int mid=l+r>>;
if(pos<=mid)update(ls(k),l,mid,pos,op,val);
else update(rs(k),mid+,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=;i<=m;i++)
q[i].op=read(),q[i].val=read();
build(,,m);
for(int i=;i<=Q;i++)
{
int num=read(),op=read(),val=read();
update(,,m,num,op,val);
printf("%d\n",sum[]);
}
return ;
}

C.Drink

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

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

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

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

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

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

[NOIP模拟16]题解的更多相关文章

  1. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

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

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

  3. HZOJ 20190818 NOIP模拟24题解

    T1 字符串: 裸的卡特兰数题,考拉学长讲过的原题,就是bzoj3907网格那题,而且这题更简单,连高精都不用 结论$C_{n+m}^{n}-C_{n+m}^{n+1}$ 考场上10min切掉 #in ...

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

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

  5. HGOI NOIP模拟4 题解

    NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...

  6. [NOIP模拟13]题解

    A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...

  7. 7.15考试总结(NOIP模拟16)[Star Way To Heaven·God Knows·Lost My Music]

    败者死于绝望,胜者死于渴望. 前言 一看这个题就来者不善,对于第一题第一眼以为是一个大模拟,没想到是最小生成树. 对于第二题,先是看到了状压可以搞到的 20pts 然后对着暴力一顿猛调后来发现是题面理 ...

  8. 2021.7.15考试总结[NOIP模拟16]

    ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...

  9. NOIP模拟·20141105题解

    [A.韩信点兵] 结论题+模板题,用到了中国剩余定理,维基百科上讲的就比较详细,这里就不再赘述了…… 对于这题,我们先利用中国剩余定理($x \equiv \sum{(a_i m_i (m_i^{-1 ...

随机推荐

  1. 处理post上传的文件;并返回路径

    /** * 处理post上传的文件:并返回路径 * @param string $path 字符串 保存文件路径示例: /Upload/image/ * @param string $format 文 ...

  2. 团队冲刺DAY3

    DESUtil.java是包含加密解密抽象类的Java文件 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准 ...

  3. (14)C++ 代码重用

    valarray<,,,, };//进行高速的数字计算 int a= val.size();//返回包含元素个数 int b= val.sum();//元素总和 int c= val.max() ...

  4. spring mvc 接入cas登录

    费劲千辛万苦开发出来的系统要接入sso 让我头大还好有大佬帮忙 首先在配置文件中写入启动的ip地址 HOST=http://127.0.0.1:8080/ 地址写你的地址和端口 然后在pom文件中导入 ...

  5. idea 查看字节码 bytecode插件 (jclasslib Bytecode Viewer、ASM Bytecode Viewer )

    文章目录 jclasslib Bytecode Viewer ASM Bytecode Viewer jclasslib Bytecode Viewer 然后重启idea===>重新编译(构建项 ...

  6. plsql的tns目录配置

    在系统环境变量中设置:TNS_ADMIN = E:\app\client\lenovo\product\12.2.0\client_1\network\admin 如果电脑中将来装了多个oracle的 ...

  7. Python 基础 4-1 字典入门

    引言 字典 是Python 内置的一种数据结构,它便于语义化表达一些结构数据,字典是开发中常用的一种数据结构 字典介绍 字典使用花括号 {} 或 dict 来创建,字典是可以嵌套使用的 字典是成对出现 ...

  8. javaSE Comparable接口中的compareTo()方法

    我们都知道,要对自建对象按照一定规则进行排序的话,要求自建对象实现Comparable接口,并重写compareTo() 方法,但compareTo() 方法的释义却不是那么容易搞清楚,下面举例进行阐 ...

  9. ZOJ-3662 Math Magic 背包DP

    这题不错,可惜我还是太弱了,没想到qwq. 看了网上大佬题解之后写的,对比了一下代码,好像我写的还是挺简洁的(逃,只是吞行比较多). 因为直接用lcm的值做下标会超时,所以我们观察发现可以组成lcm为 ...

  10. spring framework三个版本的下载包区别

    docs:该文件夹下包含Spring的相关文档.开发指南及API参考文档:dist:该文件夹下包含Spring jar包.文档.项目等内容:schema:里面包含了Spring4所用到的xsd文件: