首页 > 其他分享 >20230225模拟赛(jnxxhzz)

20230225模拟赛(jnxxhzz)

时间:2023-04-08 23:15:11浏览次数:52  
标签:20230225 可以 石头 step 反向 不好 考虑 jnxxhzz 模拟

A.bubble冒泡排序

考虑k次冒泡中的每一次,会把最大的数移到最右边
而只有最大数在变吗?
以1 4 3 5 2为例
5的右边相对顺序是不变的,而5的左边是要变的
发现在不断地把小的往前面移,且每一个较小的数都会往前最多移动k个
但我们不好算每个i往前移k个的数
考虑反向处理:算有哪些点可以被移到i
很显然在i的位置是1~k+i中的某一个数
找规律:第一个位置一定是1~ k+1中最小的,第二个是1~k+2中第二小的……
那么i的数就是1~k+i中第i小的
用优先队列实现

B.digit打字计划

暴力复杂度是,也超时得不多,然而空间有很小
考虑如何优化?
很显然可以被“用空间换时间”的折半搜索优化
先搜前5个,再搜后5个
也可以先把特殊的处理了,在直接搜

C.lake湖泊建造

要让石头圈的水最多,很显然是要使石头排成一个三角形
(由于我们不好控制水,可以换过来思考控制石头)
如果有奇数个石头,那么可以构成底为1的三角形,偶数个石头底为2
奇数个:

0 . . . . . 0
  0 . . . 0
    0 . 0
      0

偶数个:

0 . . . . . . 0
  0 . . . . 0
    0 . . 0
      0 0

那么就可以用数学公式计算(注意容易爆ll,有平方的先除再乘,用ull)
(注意unsigned long long的输出是%llu)
给出水就可以用二分求石头个数
也可以直接用类似倍增的方法求,这样更优

for(ull step=1ull<<30;step>0;step>>=1ull)
  if(gets(n+step)<m) n+=step;
n+=1ull;//和LCA一样都会停在前一个位置,所以要加一

总结:

1.这次模拟赛时间的分配做得不好,在第一题上死磕太久,导致第三题没有时间了
2.在遇到正向做不动的时候,可以考虑换个角度分析:
比如T1中不好算每个点会移到哪里,可以反向考虑ans中第i个是原数组的哪一个点移过来的;
T3中不好算控制水需要的石头数,可以反向考虑n个石头控制的水的数量
————————————————
版权声明:本文为CSDN博主「hewanying0622」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hwy0622/article/details/129221848

标签:20230225,可以,石头,step,反向,不好,考虑,jnxxhzz,模拟
From: https://www.cnblogs.com/hewanying0622/p/17299495.html

相关文章

  • 1223. 掷骰子模拟
    题目链接:1223.掷骰子模拟方法:回溯+记忆化搜索解题思路回溯要点参数列表根据题目中的操作确定在递归中需要用到的上一层的某个变量或性质。递归边界即递归的最底层,确定其返回值。记忆化搜索由于在递归中会重复计算某一状态的值,那么我们在第一次计算出来后将其保存......
  • 基于matlab模拟雷达信号检测中的恒虚警处理方法(慢门限和快门限)
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 基于Matlab模拟圆周阵列天线
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 数组模拟环形队列的思路及代码
    JAVA实现数组模拟环形队列的思路及代码前言在对Java实现数组模拟队列零了解的情况下,建议先去阅读《JAVA实现数组模拟单向队列的思路及代码》一文,可以辅助理解本文核心思想。一、环形数组队列实现:让数组达到复用的效果,即:当我们从数组队列中取出了数据,那取出数据后后这个空间可......
  • 数组模拟单向队列的思路及代码
    JAVA实现数组模拟单向队列的思路及代码一、什么是队列?队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称......
  • C/C++模拟ATM机存取款管理系统[2023-04-07]
    C/C++模拟ATM机存取款管理系统[2023-04-07]2、模拟ATM机存取款管理系统模拟银行的自动取款机使用过程中的界面和用户交互过程。实现查询银行卡余额、取款修改密码、退出系统等功能。(一)功能要求及说明:(1)将银行账户的卡号,户名,密码和账户余额从外部文件(银行账户.txt)中读入......
  • 模拟循环批量请求后台接口
    使用async,await处理异步请求。用Promise,setTimeout函数模拟后台接口<!DOCTYPEhtml><html><scripttype="text/javascript">vararr=[];varbatchSize=10;for(i=0;i<30;i++){arr.push(i);}functionb(startIdx,endIdx){ returnnewPromise((res......
  • 邮箱密码-2020模拟
    【题目描述】小明的电子邮箱密码忘记了。请你帮他找出密码。他零星记得密码的信息如下:1)密码是六位数字,前面两位是31;2)最后两位数字相同;3)能被16和46整除;请你找出所有可能的密码并统计个数。【评分标准】30分︰正确打印出一组符合的六位数(程序不报错);80分∶在满足30基础......
  • JS 模拟鼠标事件mouse over、click
     <!DOCTYPEhtml><html><head><metacharset="utf-8"><metahttp-equiv="content-type"content="text/html;charset=utf-8"><metaname="renderer"content="webkit&quo......
  • 4.6 模拟赛小记
    小寄,嘿嘿,嘿嘿。T1猴子选大王首先声明我是智障,然后本题时根据子任务分开解决。对于第一个子任务,可以看一下[luoguP8671约瑟夫环](https://www.luogu.com.cn/problem/P8671),用f存当前所选个数下的答案下标,易推得公式f[i]=(f[i-1]+m)%i。怎么推得?正难则反,不妨设想......