iOS
c++20 协程入门
随着coroutine ts正式进入c++20,c++已经进入协程时代了。c++20提供的无栈协程,拥有许多无与伦比的优越性,比如说没有传染性,可以与以前非协程风格的代码并存,再比如说不需要额外的调度器,总之是个好东西。 但是不幸的是c++20的协程标准只包含编译器需要实现的底层功能,并
2023冲刺国赛模拟 37.1
怎么会有人 UNR Day1 只有 30 分啊! 感觉最近对自己的考试策略产生了很大的怀疑,平时模拟赛都没有太注意时间的分配, UNR 一直在关注考试剩余时间,发现 2 小时内还没有切掉 T1 后直接索性放弃了;然而剩余 3 小时也没有写好应得的暴力。 Day2 T1 比较幸运的在 1 个半小时左右观察出一点性质,前后使用暴力验证、对拍,写正解又用去了 1 个小时,算下来完整的切掉 T1 需要 1
数据结构练习笔记——删除单链表中相同元素
删除单链表中相同元素 【问题描述】单链表中存放了若干整数,请删除相同整数。 【输入形式】单链表 【输出形式】删除相同整数后的单链表 【样例输入】1 1 1 2 3 【样例输出】1 2 3 【样例说明】递增的形式输入数据,允许相同元素 记录一些数据结构学习过程的习题代码,便于日后查看。如有错误,欢迎交流指正。
Cisco交换机常见安全攻击
Cisco交换机常见安全攻击 MAC地址泛洪 使用网络攻击工具可以执行MAC泛洪。网络入侵工具以大量无效的源MAC地址泛洪攻击交换机,直到MAC地址表充满。 DHCP欺骗攻击 要防止DHCP攻击,可使用Cisco catalyst交换机上的DHCP侦听和端口安全性功能。 下面步骤说明如何在Cisco IOS交换机上配置DHCP侦听。 步骤1 使用 ip dhcp snooping全局
CDQ分治的优化dp理解
CDQ分治进阶:优化dp 目录CDQ分治进阶:优化dp对于CDQ的深层了解CDQ和DP注意事项:(警告后人) 对于CDQ的深层了解 CDQ和DP 注意事项:(警告后人) 先看基础题https://www.luogu.com.cn/problem/P4093 思路已经写在代码里面了
题解 CF1379F2 Chess Strikes Back (hard version)
数据结构之小清新思维题。 容易想到把 (2ntimes2m) 棋盘中每个 (2times 2) 的部分压缩,其中必须含有恰好一个棋子。 对于每个 (2times 2) 分两种情况讨论(可能同时具备或不具备以下两种): 左上角不能用,记为 (L)。 右下角不能用,记为 (R)。 然后通过画图可以发现,如果一个点为 (R),那么它的左上方确定了,且不能含有 (L)。如果一个点为 (L),那
题解 CF1271D Portals
贪心+DP。 对于一个点,后选显然比先选好,也就是说每个点都对应了唯一一个来源。 于是我们可以把每个点所能回溯到的点的收益值从大到小排序,贪心地选前缀。 定义 (f_{i,j}) 表示考虑了前 (i) 个点,剩下 (j) 个人,最大收益。 转移方程和 (01) 背包的一样。 [f_{i,j}=f_{i-1,j-b_i} ][f_{i,j}=maxlimits_{t}(f_{i-1,j+t-b_i}
题解 CF980D Perfect Groups
有个显然的小 trick:如果两个数相乘为平方数,那么消去平方因子后这两个数相等。 于是我们可以暴力枚举,每出现一个新数就加一,用 unordered_map 维护,然后就 T 了。 考虑优化。我们对于每个数预处理出上一个与它相等的数的位置。这样每次枚举的时候只需要看 (pre_i) 是否小于左边界即可。 注意特判一下 (0)。 复杂度 (O(n^2))。 code:
c++ map erase start location and specified count items
// main.cpp #include <algorithm> #include <chrono> #include <ctime> #include <fstream> #include <iomanip> #include <iostream> #include <map> #include <mut
Hybrid App 开发模式的未来
引言 在移动 App 开发领域,主流的开发模式可分为 Native、Hybrid、WebApp 三种方式。然而 2013 年,纯 WebApp 开发模式的发展受到一定挫折,以 Facebook 为代表的独立 App 转投 Native 阵营。但是开发者对 WebApp 更新速度快,跨平台优势的渴望却并未减弱,最终的结果是促成了 Hybrid App 在 2013 年数量的激增,并且增长的速率
【多图】发布用于App Store分发的 iOS 应用
首先参考官方文档做好前期工作 https://learn.microsoft.com/zh-cn/dotnet/maui/ios/deployment/publish-app-store?tabs=vs 设为Relase存档发布 签名并发布 发布到app stroe 发布失败备用方案 查找或者安装 Transporter 程序,手动上传 附上app大小参考
2023.7.17小结
前排碎碎念 今天是去if楼的第二天,昨晚开了好久好久的会,小狮子要来湘潭找我了,有些开心。但是好好学习比较重要捏,那就让他先独守空房一阵子叭,诶嘿今天我值日,虽然我早上起不来但是可以晚上晚点走,主打一个新加坡作息。 浅浅看一下今天的任务清单好咯。 任务清单 高精度 快速幂 并查集 前缀和与拆分 最小生成树 并查集 简单来说并查集的任务就是查找祖先,合并祖先。是五一假期的任务,今天想去写最小生成
题解 P2276 [HNOI2002]农场的果树
首先可以观察出一颗 (n) 个节点的二叉树,当其字典序最小的时候,其形态为一条向右偏的链,当其字典序最大的时候,是一条向左偏的链。 由于每一种编码对应唯一的一颗二叉树,我们可以先建树。 然后考虑树上分治,尝试以下三种方式: 变大右子树的字典序 变大左子树的字典序,并将右子树变成一条链 将左子树的大小 (+1) ,右子树的大小 (-1) ,然后都转化成一条向右偏的链 递归边界为 (s
题解 P7640 [BalticOI 2006 Day 2] CITY PLANNING
首先我们定义“圈”为与原点距离相等的点集。 暴力: 把圈放到堆里,然后每次取出代价最小的一圈,修改当前圈的楼层,向外圈拓展。 正解: 考虑二分。 如果是二分最终答案,我们会发现不好做,所以我们二分所有住户的代价的最大值,即 (c_i+dis cdot t)(显然是具有单调性的)。 check 函数:由于圈的总数是 (sqrt{n}) 级别的,所以可以直接枚举,对于每一圈可以二分出楼层的最大值,然
题解 P7250 [BalticOI 2012 Day1] 山峰
通过观察,可以发现此题和最小生成树十分相似(两个地点之间途经的最小值最大)。 于是可以考虑这么做: 通过 bfs 将每一个块预处理出来,并记录其编号、高度、类型(是否为高地)以及边缘的点。 将每一个块按高度从大到小排序。 依次枚举每个块: 对于当前要处理的块,枚举其边界的所有点,看会与哪些已插入的块相连,同时用并查集找到他们的“祖先”,即该块所连接形成的连通块内最高的高地。然后除了
题解 AT3726 [ARC087B] FT Robot
首先可以观察到一个非常重要的性质:对于一次前进的操作,如果前面有奇数次转向,则走上下,否则走左右。(当然如果一开始就前进就只能走右) 于是我们可以将其拆成许多的“块”,并分成两类,即前进方向为左右还是上下。 然后对于两个维度分别 dp 。 (f_{i},_{j}=f_{i-1},_{j-val} | f_{i-1},_{j+val}) (g) 同理。 当然还要对负数的情况以及边界进行一下处理
2023-07-17:给定一个数组arr,长度为n, 再给定一个数字k,表示一定要将arr划分成k个集合, 每个数字只能进一个集合。 返回每个集合内部的平均值都累加起来最小的值。 平均值向下取整。 1
2023-07-17:给定一个数组arr,长度为n, 再给定一个数字k,表示一定要将arr划分成k个集合, 每个数字只能进一个集合。 返回每个集合内部的平均值都累加起来最小的值。 平均值向下取整。 1 <= n <= 10^5, 0 <= arr[i] <= 10^5, 1 <= k <= n。 真实大厂笔试题。 答案2023-07-17: 算法1(minAve
题解 P5768 [CQOI2016]路由表
暴力1:按照题意模拟即可,复杂度 (O(32n^2)),预计 30pts。 暴力2:将 IP 地址用 unsigned int 存下来,比较 (a),(b) 是否匹配就只需要用位运算 (O(1)) 判断即可,复杂度 (O(n^2)),预计 50pts。 正解:考虑将当前插入的所有 IP 地址建成一颗 01Trie,结尾打上标记。 对于每次询问,将路径上的所有标记存入一个维护单调递增序列的栈,二分
题解 P8398 [CCC2022 S4] Good Triplets
显然,答案不好直接求,我们考虑用总数减去不合法的方案数。 为了不算重,我们每次只考虑当前点与圆心连线交圆周于一点所形成的半圆内的不合法情况,然后用组合数算出剩下两个点的选择方案数。 我们可以用前缀和记录区间内点的数量,然后对于一个点可以算出它的对称点,两段区间拼起来就可以算出半圆内的点数。 最后还要减去退化的三角形,一种是三个点在同一位置,另一种是有两个点在同一位置。 值得注意的是,如果周长为奇
题解 P7165 [COCI2020-2021#1] Papričice
题面描述 给定一颗树,求分成三部分后的最小差异值。 题解 暴力:每次枚举两个点,将其父边断掉,如果存在祖先关系则特判一下,复杂度 (O(n^2)),预计 50pts。 正解:dfs 搜索每个结点,砍掉它的父边,剩下的尽量等分(易证)。 这一步可以用 multiset 维护。 对于一个点,将其到根节点的链上的点放入 (s2),再将这条链左边的所有点放入 (s1)。 然后令 (x= dfrac{n-
题解 P4815 [CCO2014] 狼人游戏
看题目限制,可以发现如果将机器人作为点,指控和保护关系作为边,可以建出一个森林,就下来就是传统的树形背包了。 设 (f_{i,j,0/1}) 表示当前点为 (i),子树内有 (j) 个狼人,当前点是否为狼人的方案数。 初始化:(f_{u,0,0} = f_{u,1,1} = 1) 当前点为狼: 指控:(f_{u,j,1}=f_{u,j-k,1} times f_{v,k,0}) 保护:(f_{u
题解 [ABC276F] Double Chance
很容易想到分类。 我们可以把 (1) 到 (i-1) 的球分为两类,一类是权值小于 (val_i),另一类是权值大于 (val_i)。 对于第一类,(sum) 加上小于 (val_i) 的球的个数乘以 (val_i)。 对于第二类,(sum) 加上所有大于 (val_i) 的球的权值。 这显然可以用两个树状数组维护。 最后再乘上总方案数的逆元即可。 复杂度 (O(nlog n))。 code:
题解 P5426 [USACO19OPEN]Balancing Inversions G
来一篇简单易懂的良心题解。 由于数值不是 (0) 就是 (1),我们可以考虑将逆序对的统计方式化简。 以左区间为例,设 (x) 为 (1) 的个数,(p_i) 为第 (i) 个 (1) 的坐标,则逆序对个数为 (sumlimits_{i=1}^{x}n-p_i-(x-i))。也就是 ((n-x)cdot x+frac{xcdot (x+1)}{2}-sumlimits_{i=1}^{x}p_i)
题解 CF1775D Friendly Spiders
Friendly Spiders 带有技巧的最短路。 如果 (u) 能到 (v),说明 (gcd(u,v)>1),也就是有相同因子。 所以我们考虑对于每个数 (u),向他的所有质因子连一条长度为 (1) 的边,这样我们从 (u) 到 (v) 需要走两步,最终答案除以 (2) 即可。 每次遇到一个新的因子,都要新建节点。 需要注意的是,如果 (u) 的质因子中有真实存在的点,那么边权要设为 2
题解 CF1775E The Human Equation
The Human Equation 思维题。 我们考虑每次 (a) 数组加一减一对于其前缀和 (sum) 的影响。 可以发现,假设相邻两次加一和减一的位置分别为 (l) 和 (r),那么 (sum) 在 ([l,r)) 内会加一。 先减后加也同理。 所以,一次加减操作相当于将 (sum) 若干段连续序列加一或减一。 而 (sum) 全部为 (0) 是 (a) 都变为 (0) 的充要条件。 因此我
题解 [ARC153B] Grid Rotations
[ARC153B] Grid Rotations 有思维含量的一题。 我们横纵坐标分开考虑,对于每一个矩形,每次操作会使其内部元素的横坐标上下对调。 纵坐标也同理,左右对调。 而这种反转操作我们显然可以直接用两棵文艺平衡树维护,复杂度 (O(nlog n))。 标程的做法更巧妙一下。我们可以把一条链收尾相接,两段序列的反转就相当于圆的反转。 所以我们可以只定位其中两个点,然后根据其最终位置填补出剩
题解 CF868F Yet Another Minimization Problem
Yet Another Minimization Problem 神仙题。 第一眼看上去就是 DP。 定义 (f_{i,j}) 表示当前点 (i),分 (j) 段的最小费用。 (f_{i,j}= min(f_{i,j},f_{k,j-1}+val_{k+1,i})) 然后发现复杂度 (O(n^2k)),直接 T 飞,需要优化。 我们发现 (j) 那一维可以滚掉,也就是只考虑第一维,然后做 (j)
题解 CF1781F Bracket Insertion
Bracket Insertion 神仙 DP 题,不愧是 tourist。 容易发现,括号序列一共有 (1cdot 3cdot 5...cdot (2n-1)) 种生成方式。 假如 ( 为 (1),) 为 (-1),那么一个序列合法的充要条件为:最小前缀和为 (0),且以 (0) 结尾。 现在考虑维护这些前缀和。 如果我们在当前序列某一位后插入一个 (),且那一位的前缀和为 (x),那么相当于把