namo
Cold啦啦啦
这个作者很懒,什么都没留下…
展开
-
Daimayuan Online Judge #731. 数字替换
算法分析模拟+思维倒着更新,如果前后数有关联的话,前面的数一定会被2操作给修改,因此倒着维护数的关系,然后用到了,并查集中f[]的思想,维护当前被修改后最终的结果AC code#include <bits/stdc++.h>using namespace std;const int N = 5e5 + 10;int f[N];struct node{ int op,x,y;};vector<node>v;vector<int>a原创 2022-04-10 09:29:26 · 164 阅读 · 0 评论 -
Daimayuan Online Judge #665. 数组划分
题目链接算法分析线性dp + 贪心 ?我们若想要每个子数组求和后按与运算的值尽可能的大,按照贪心的思路,我们就从高位上选,若能满足选中这些数位后,还能划分出 k 个字段则说明这个数字可以被选中那么现在需要解决的问题就是如何判断划分 k 个子段的合法性,假设当前需要验证 x 的合法性字段 可以在 处被切割下来,那么说明 这段区间和 & 其他数组的和 是 >= x 的在之前的区间...原创 2022-03-29 21:15:18 · 438 阅读 · 0 评论 -
Daimayuan Online Judge # 608 字典序最小
算法分析单调栈这题有很特别的需要注意到地方就是,我们要取出 个不同数使得这 个数的字典序最小,但是这 个数,数据保证了 [1,n] 中的数,每个至少出现一次,那么我们最希望看到的其实就是[1,2,3,4,5,6,7,8,9...........n]那么该怎么维护出这样的序列呢为了字典序最小,那么我们一定是希望大的数出现在后面,但是又要保证 这个大的数是会出现在答案中的,那么我们当前错过了这个数,必须保证后边还有这个数的存在才行。比如说10 55 4 3 2 1 4 1原创 2022-03-22 17:07:26 · 389 阅读 · 0 评论 -
Daimayuan Online Judge #607. 平方计数
算法分析神奇的暴力枚举作为平方数 , 再枚举作为要变成的那个平方数如果 那么这样的 是可能存在的计算就好了优雅的暴力由于数据量大的时候就很容易不会满足条件就直接break掉了时间复杂度是,是一个调和级数所以可以过掉了AC Code#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e7 + 10;ll cnt[N];...原创 2022-03-21 21:54:24 · 467 阅读 · 0 评论 -
Codeforces Round #770 (Div. 2) F. Fibonacci Additions
算法分析差分变种我真的是T麻了 事实证明关同步 是比scanf快的题解先gugu了 放个代码 明天再来补AC Code#include<bits/stdc++.h>#define int long longusing namespace std;const int N = 3e5 + 10;int a[N],b[N],c[N],d[N],f[N];int zero = 0;int n,q,mod; void inline update(int pos,i原创 2022-03-19 17:54:34 · 847 阅读 · 0 评论 -
Daimayuan Online Judge #504. 连续子序列
算法分析线性dp表示以结尾的最长上升子序列的长度为那么由于限定了公差为 那么答案一定是从 转移而来的维护一个最大长度即可然后要输出方案的话,已经最大长度时对应的,那么就是输出即可AC Code#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;int a[N];map<int,int> mp;int main(){ int n;...原创 2022-03-12 15:18:16 · 548 阅读 · 0 评论 -
namomo 每日一题 207 拆方块
题目链接算法分析思维最后留下来的方块一定是最底层的,因此考虑最底层的怎么跑到白色格子上即可考虑往左边和右边跑,各自来一次,取min求最小的最大,保证每个格子都可以在这些步数内跑出去AC Code#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int a[N],ans1[N],ans2[N];int main(){ int n;cin >> n;原创 2022-03-11 19:19:41 · 149 阅读 · 0 评论 -
Daimayuan Online Judge #469. Closest Equals
算法分析ST表 + 思维 ??(只要是能维护区间的数据结构就可以每次就是查询一段区间内相同的数之间最短的距离那么直接一点去思考我们可以将每一对这样的数存下来,然后找最小的那么这样子显然是会有很多对是重叠的比如说 1 1 1 1 1肯定要选择第一个和第二个 1 做匹配才是最短的因此我们以左端点为起始点,只要右端点大于之前已经匹配的位置的对,一定不是最短的那么就可以除去很多对了,左端点不同的则是新的一对区间,保证了左端点有序我们用维护第对区间的端点,然后经典 ST...原创 2022-03-10 09:19:01 · 1124 阅读 · 0 评论 -
Daimayuan Online Judge #497. XOR Inverse
算法分析Trie + 位运算先挂个代码,明天再写(已经在代码旁边加注释了 可参考AC Code#include<cstdio>#include<vector>#define int long longusing namespace std;typedef long long ll;const int MAXN = 3e5 + 5;int t[32 * MAXN][2];vector<int> g[32 * MAXN];int dp原创 2022-03-08 21:25:59 · 300 阅读 · 2 评论 -
Daimayuan Online Judge #466. 摘桃子
算法分析前缀和 + 双指针由题意可知求的就是经转换可以得到那么就只需要用 map 维护之前出现过的,再用双指针保证,即可AC code#include<bits/stdc++.h>#define int long longusing namespace std;const int N = 2e5 + 10;int a[N],s[N];map<int,int> mp;signed main(){ int n,k;cin &...原创 2022-03-08 16:18:52 · 218 阅读 · 0 评论 -
Daimayuan Online Judge #468. 函数求和
算法分析知识点:容斥 + 位运算??&意味着在某位上为时,在该位上为。由于的范围极大不可能全部枚举,因此我们从的角度入手(以下指的位都是二进制表示下的位,为了方便说明下标是从 1 开始的)对于每一个的加入都会对的某些位形成限制。那么我们就考虑容斥,即计算出每一次的贡献,即以作为答案的贡献ex.2 22 1当a1 = 2 还没有形成限制时,x 共有两位是可以任意选的(即自由的位置有两位),00,01,10当 ...原创 2022-03-07 21:31:41 · 230 阅读 · 0 评论 -
Daimayuan Online Judge #467. 路径计数2
算法分析知识点:计数类dp需要注意的点计算阶乘和逆元的时候需要算到,因为有中间过程,会达到的范围而不是取模相减会出现负数记得补上mod (老生常谈了属于是状态表示 表示从左上角位置开始,走到第 个障碍的合法方案数状态转移倘若不考虑是否合法,随便走的话,走到第 个障碍的坐标 ,有 种,但是这期间是存在不合法的方案的,因此考虑容斥,需要去除不合法的方案。对于第个障碍来说,到第个障碍的非法方案,是由先到第个障碍的位置,再任意走到第个障碍的路线...原创 2022-03-07 21:27:22 · 289 阅读 · 7 评论 -
Daimayuan Online Judge #463. 饿饿 饭饭
算法分析二分答案 的数据范围,我们显然是不可能去模拟每一轮的那么其实这一轮一轮的循环,只需要模拟最后一轮就可以了,因为之前每一轮的变化其实就是假设当前轮为 , ,那么前后轮之间其实并没有啥影响,那么我们只需要去二分最后一轮是在什么时候,再模拟一遍最后一轮的过程就可以了。那么这个二分该怎么写呢bool check(ll x){ ll res = 0; for(int i = 1;i <= n;i ++) { res += min(原创 2022-03-05 11:35:34 · 399 阅读 · 0 评论 -
Daimayuan Online Judge #454. Minimum Or Spanning Tree 3.4 打卡
算法分析知识点 : 并查集 + 贪心最小生成树的代价是或的结果,那么或的结果将由这个边权的最高位决定那么我们当然是希望这个边权的最高位尽可能地小因此我们按位贪心,根据数据范围 ,那么最高位不会超过 ,那么就从高位向下枚举,若不使用在第 位上有权的边可以构成一颗生成树,说明在第位上有权的边,可以被抛弃了,(不使用高位有权值的边答案一定更小那么就基于这个思路,枚举 31 个位,在每一个位上判断是否可以不用该位构建生成树,若可以构建就抛弃这个位上有权的边,若不可以构建,..原创 2022-03-04 16:40:32 · 309 阅读 · 0 评论 -
Daimayuan Online Judge #464. 数数 3.3 打卡
算法分析树状数组 + 离散化经典的二维数点问题询问之间小于的个数,其实问的就是在 二维坐标下,以为左下角,为右上角的矩形中有多少个点的问题树状数组 一个应用其实就是快速的求出前缀和 那么这个矩形中有多少个点可不就是个二维前缀和嘛因此就是统计出四个矩形中的点数 加加减减就完事了然后注意一下数据范围,离散化一下就好了AC Code#include <bits/stdc++.h>using namespace std;#define int ...原创 2022-03-03 16:08:43 · 462 阅读 · 0 评论 -
Daimayuan Online Judge #452. 序列操作 3.2 打卡
算法分析本题需要实现两种操作1. 将第 个数修改成 2. 将小于的数都修改成 的数据范围限制了在线的做法(可能有在线的做法 但是我太菜了 我只会离线总体上的思路就是考虑每一个数受操作的影响一个数只会被最后一次 的操作 1 和 最后一次操作 1 后的操作 2 影响操作 2 只会对之前的询问产生影响,且只有最大的值才会产生影响基于这个思路,只需要 将每个位置的最后一次 操作 1 之后的 操作 2 的最大值和最后一次操作 1 的数进行比较 取大就可以了细节上的解释写在注...原创 2022-03-02 16:28:45 · 319 阅读 · 0 评论 -
Daimayuan Online Judge #456. 选数 3.1 打卡
算法分析抽屉原理 + 前缀和 ??!!首先根据抽屉原理,我们可以保证本题必定有解,因为取个数要么会出现,要么就会出现前缀,所以根据这个原理这题目就很简单了。对这些数字做前缀和,倘若出现了,那么就直接输出前缀的方案就可以了倘若出现了,那么就把和之间的数字给输出就可以了和只需要开一个数组维护一下曾经出现的值就可以了详情见代码AC Code#include<bits/stdc++.h>using namespace...原创 2022-03-01 09:13:21 · 286 阅读 · 0 评论 -
Daimayuan Online Judge #451. Dis 2.28打卡
题目链接算法分析题面非常简洁,即多次询问两个点简单路径所构成点集的异或和。显然的 LCA 板子题我们开一个数组 DFS 一下记录从根节点到各个结点的异或和,那么询问 两点间的异或和就是while(m --) { int u,v; scanf("%d%d",&u,&v); int lca = LCA(u,v); LL ans = sum[u] ^ sum[v] ^ a[lca];原创 2022-02-28 20:28:33 · 179 阅读 · 0 评论