首页 > 其他分享 >刷题笔记 3.25

刷题笔记 3.25

时间:2024-03-25 19:33:37浏览次数:24  
标签:sort 数列 一个 可以 笔记 因子 3.25 然后 刷题

ABC254
C题:给定一个长为n的数列,给定k,可以进行的操作是:交换a[i]和a[i+k],可以进行任意多次,问能否sort成一个非递减数列?

我当时的思路:因为我们是知道最后的数列的样子的,然后就思考:“这个数怎么变过来?可以变吗?” 然后就发现好像只需要最后的非递减数列的每一个数在原数列中的对应下标和变换完成后的下标相差k就行了
formally thinking之后就发现可以把原数列相等切割成k份 每一份中每一个数的个数相等即可

implementation: 我们需要判断是否每个数在两集合中出现的次数都相等 本来想用两个unordered_map<int,int> mp1[k],mp2[k] 来分别表示sort前和sort后的每个数的个数 然后判断是否相等(任意i 任意j mp1[i][j] == mp2[i][j])后来发现不需要这么复杂 可以只用一个unordered_map即可(任意i,j mp[i][j] == 0)

反思:熟知结论:如果任意相邻两项可以swap,那么一定可以变成ascending 于是此题就相当于一个小特例 虽然当时没有看出来QwQ

D题:给定一个数N (2e5)求有多少个正整数对<i,j>满足i*j为平方数

其实思路是和题解一致的 就是这样的i和j满足条件等价于把他们的平方因子(不妨记为s[i]和s[j])去除之后的i'和j'有完全一样的素因子集合 所以只要对每一种集合记录有多少个i会变成同一个集合
然而vp的时候花了大把时间在思考“如何表示这一个去除所有平方因子后剩下的素因子集合”(想着用一个map<set,int>……) tmd看题解才发现 原来只需要i/s[i] == j/s[j]??????? 我直接晕倒(就是说这个状态考可以完全等价于把所有素因子乘起来用一个数表示)e.g.140 → 5、7 → mp[35]++

思考:学到了一种新的表示状态的方法:如果有很多元 那就找一个生成函数(或许是这么叫的?)映射过去(有点hash的意味了hh)

E题:暴力bfs/dfs

implementation: 需要多次使用搜索(但是每次搜索量都不大)因此需要反复重置st数组 如果每次都memset,会set 2e5*2e5个导致TLE,解决方案是每次bfs的时候用vector记录visited的点,然后把这些点重置即可

F题:不会TVT 有两个长度为n的数列a[1]a[n];b[1]b[n] 有一个n*n的长方形,g[i][j] = a[i]+b[j];有Q个询问 询问(l1,r1),(l2,r2)围成的长方形的gcd

残破的思路:如果要是长方形的gcd那么就需要是a[i]-a[i-1]; a[i-1]-a[i-2];……;b[j]-b[j-1]的公因子 然后就只需要再是左上角元素的因子就可以啦! 感觉很像前缀和但是前缀不出来w 反正就是感觉思路就是正确的 但怎么预处理就不晓得了

看完题解………… md要用segment tree……思路正确但tm真的不会线段树(哭) 爬去学惹

G题:好吧 大概想法是贪心但题解没咋看懂 先放放w

ABC324
C题:可以说是今日最让我感到惊艳的题目了!对一个字符串S 如果可以经过0或1次操作变换成T 那么称为二者等价 操作consist of(在任意位置 删除一个字符/增加一个字符/更改一个字符)(易知满足对称性) 给定模式字符串T (5e5) 和好多个S[i](总长5e5) 求出和T等价的S[i]的个数及具体下标

解答:桃花影落飞神剑! 答案把“等价”这一个模糊的概念转化成了一个完美的充要条件! 简直太精彩了!具体就是:如果T删除了一个元素变成S 那么s.size() == t.size()-1 && pre(s,t) + suf(s,t) >= s.size()(其中pre代表s和t共用的前缀(连续) suf为后缀) 同理另外两种等价关系也可以这样描述

反思:反正就是……太厉害了……只能赞叹…… 或许有一点divide and conquer的想法在里面?反正这个分类就很妙(莫名联想到最优贸易那一道题 分成点1到点k路径中的最小值 & 点k到点n路径中的最大值)

D题:给定一个长度为N的字符串S(13位) 可以将它以任意顺序排列 判断能排成几个完全平方数

implementation: 枚举所有平方数 判断是否和原字符串有相同的multiset 但是实际上不需要用set这么麻烦
首先是对S进行一个sort ** ranges::sort(S) 或者 sort(S.begin(),S.end());
然后枚举i*i 然后使用
to_string方法变成string T(*这个方法其实也可以对double使用!) 然后T.resize(N,'0') ** 然后ranges::sort(T) 然后判断S==T?
比我的方法好太多hh

F题:有向图 每个边: u[i] → v[i] 有两个权值b[i]和c[i] 寻找从1到n的path使得Σb[i] / Σc[i]最大 求最大值(精确到1e-9) extra条件:每个有向边都是从小的点射向大的点

残破的想法:dijkstra?但是怎么搞呢……不会w

解答:我们可以二分答案qaq 然后如果Σb[i] / Σc[i] >= x ===== Σ(b[i]-xc[i]) >= 0 !!!这样就可以变成最短路问题了!!!(非常巧妙 本来b[i]和c[i]之间是独立的 这样一下子变成了每个b[i]只要和c[i]亲就可以了!! 奇妙的数学等价法!!)

implementation:此题如果用spfa+二分依然会爆(没试dijkstra但感觉也会/哭) 然后题目给了一个非常非常精妙的求最短路的方法!(时间是O(m))也就是用dp!! 反正我是想不到qwq

G题先放放ovo

标签:sort,数列,一个,可以,笔记,因子,3.25,然后,刷题
From: https://www.cnblogs.com/BladeWaltz/p/18095125

相关文章

  • 牛客周赛 Round 38做题笔记
    一.题目链接登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/contest/78......
  • 【每日算法】理论:AIGC模型 刷题:力扣链表操作
    上期文章【每日算法】理论:图像分割相关刷题:设计链表文章目录上期文章一、上期问题二、理论问题1、LAMAInpaint2、IPadapter模型3、Anydoor4、vit(VisionTransformer)架构5、MAE6、CLIP模型三、力扣刷题回顾-链表操作203.移除链表元素206.反转链表24.两两交换链表......
  • 学习笔记之算法快速排序
    快速排序听说有的公司面试会考?0.0快速排序思想:分治法基本思想:1、从数列中选出一个数2、分区(遍历),比它大的放他右边,比它小的或者等于的,放他左边3、对左右区间重复第2步,直到区间只有一个数(递归)参考:快速排序|菜鸟教程(runoob.com)在该网站......
  • Vue学习笔记59--store(getters + )
    store(getters) 示例一:Count.vue<template><div><h3>当前求和为:{{$store.state.sum}}</h3><h3>当前求和*10为:{{$store.getters.bigSum}}</h3><!--<selectv-model="selectNo"><option:va......
  • 学习笔记-d2l
    2.1TensorFlow中的Tensors是不可变的,也不能被赋值。TensorFlow中的Variables是支持赋值的可变容器。请记住,TensorFlow中的梯度不会通过Variable反向传播。如果我们用Y=X+Y,我们将取消引用Y指向的张量,而是指向新分配的内存处的张量。assign将一个操作的结果分配给一个Var......
  • Vue学习笔记58--vuex
    vuex专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。Github地址:https://github.com/vuejs/vuex什么时候使用Vuex多个组件依赖于同一状态来自不同组件的行为需要......
  • 如何读论文 李沐视频笔记
    前言内容不多,但姑且记下来加深印象好了[视频链接](https://www.bilibili.com/video/BV1H44y1t75x/?spm_id_from=333.788&vd_source=0e55873fcd6a0d01839a7f7f37c36254)内容总概读论文的重点在于筛选出适合自己的论文,通过三遍阅读来找出并吸收论文大致分为1、标题title2、摘......
  • 磁盘扩容,逻辑卷方式笔记
    相关概念:1.逻辑卷LVMLVM(LogicalVolumeManager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一块大硬盘使用,空间不足可以继续将新硬盘或其他硬盘的分区加入其中,可以实现硬盘空间的动态管理,相比于磁盘分区,可以实现更好更方便的管理。2.PV、VG、LVPV(PhysicalV......
  • 代码随想录刷题记录4——滑动窗口和螺旋矩阵
    数组:701.二分查找27.移除元素977.有序数组的平方209.长度最小的子数组59.螺旋矩阵思路:209.长度最小的子数组只要知道要用滑动窗口的思路来写就好了!滑动窗口本质上就是双指针核心问题是考虑好窗口什么时候变大什么时候变小59.螺旋矩阵并没有什么新的算法思想,但......
  • Pytorch学习笔记
    输出关于PyTorch、CUDA设备以及CUDA运行时的相关信息importtorchdefcheck_torch_and_cuda_details():#检查PyTorch版本print("PyTorchversion:",torch.__version__)#检查CUDA是否可用iftorch.cuda.is_available():device=torch.devi......