首页 > TAG信息列表 > 200005
【笔记】入门DP(Ⅱ)
0X00 P1433 吃奶酪 状压 \(DP\),把经过的点压缩成01串。若第 \(i\) 位为 \(0\) 表示未到达,为 \(1\) 则表示已到达。 用 \(f[i][j]\) 表示以 \(i\) 为起点,经过 \(j\) 所含 \(1\) 位置的所有点的最小距离。 先预处理出点两两之间的距离,记为 \(dis[i][j]\),初始化 \(f\) 数组为极大值(\(【Virt.Contest】CF1321(div.2)
第一次打虚拟赛。 CF 传送门 T1:Contest for Robots 统计 \(r[i]=1\) 且 \(b[i]=0\) 的位数 \(t1\) 和 \(r[i]=0\) 且 \(b[i]=1\) 的位数 \(t2\)。 两个数都为 \(0\) 或都为 \(1\) 时没有贡献。 若 \(t1=0\),则 \(r\) 序列不管乘多大的 \(p\) 也不会比 \(b\)序列更大,所以直接输出 \(Part2.3 P1314 聪明的质检员 【二分答案、前缀和优化】
原题链接:P1314 [NOIP2011 提高组] 聪明的质监员 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意:给出定义 y (由数组区间中大于参数 W 的数量和其对应的价值决定 )以及已知标准 s 的输入,计算多个区间内的 y 的总和与标准 s 相比较,求出最小差值时的标准参数 W 思路:首先是标准的二Codeforces Round #772 (Div. 2)
A. Min Or Sum 题意:给定一个数组,每次挑两个数换为任意与它们或运算结果相同的两个数。操作无限次,求数组最小和。 解:将它们全异或起来,换成这个数和一堆0。 答案: #include <bits/stdc++.h> using namespace std; #define ll long long #define maxx 1000005 #define maxn 1005 #de题解 nkoj9162 改色找根
\(1\le n,m\le 2\times 10^5\)。 考虑一个简单直接的建图,若将 \(a\) 颜色作为树根需要将 \(b\) 颜色变为 \(a\),从 \(a\) 向 \(b\) 连边。 枚举每个颜色 \(a\) 的所有点,用类似虚树的方法找出所有 \(a\) 颜色依赖的颜色并连边。连边可以用倍增优化建图。倍增优化建图和倍增是一样的【CF983E】NN country
预处理出点 \(u\) 往上坐 \(2^i\) 次车后能到达的深度最浅节点 \(f_{u,i}\),查询时把两个点在深度大于 lca 时一直倍增向上跳,这时只需要查询是否有车直接经过两点。相当于这辆车的两个端点分别在这两点的子树内,用 dfs 序将其转化为二位数点即可。二位数点可以用桶排。 考虑如何预处Codeforces Round #768 (Div. 2) C D
C https://codeforces.com/contest/1631/problem/C n是一个2的幂次,给0~n-1这些数两两配对,使得配对之后所有数对 进行与运算 的和 等于给定的k值。 最初的想法是先按顺序配对上,和k的差值再通过交换配对的数来实现。但是没有找到交换的规律,代码很难写出来 正解: 在发现了n的特殊性质Atcoder Regular Contest 128
A Gold and Silver 考虑一个贪心策略,在金价高的时候把它换成白银,在金价低的时候把白银换成黄金。 于是这题就没了。 #include <cstdio> #include <iostream> #include <cstring> #include <string> #include <algorithm> //inline int min(const double x, const double y)牛客小白月赛38 进击的图灵机
题目链接:https://ac.nowcoder.com/acm/contest/11215/H (一)预备知识: (1)upper_bound( begin,end,num): 从数组的begin位置到end-1位置二分查找 第一个大于num的数字,找到返回该数字的地址, 不存在则返回end。通过返回的地址减去起始地址begin, 得到找到数字在数Codeforces Round #733 (Div. 1 + Div. 2)题解
快两年没有碰OI了orz,打一次直接橙变紫掉200分。 A题 水题 B题 水题 C题 水题 D题 贪心,可以想到有多少个不同的a[i]就有多少最终答案。匹配上,贪心选择,然后乱匹配。如果发现i自己对应自己了,那么将i对应向a[i],而a[i]对应的人对上自己就可以了。 #include<algorithm> #inclu[AH2017/HNOI2017]影魔 题解(线段树 思维)
[AH2017/HNOI2017]影魔 题解 题意 \(~~~~\) 给出长为 \(n\) 的排列 \(\{k\}\) ,共 \(m\) 次给出 \([a,b]\) ,求: \[\sum_{i=a}^b\sum_{j=i+1}^b [k_i>k_s \land k_j>k_s]\times p_1 +[k_i<k_s<k_j \lor k_i>k_s>s_j]\times p_2 (k_s=\max_{l=i+1}^{j-1}LG P4149 [IOI2011]Race
Description 给一棵树,每条边有权。求一条简单路径,权值和等于 $k$,且边的数量最小。 Solution 点分治,统计答案时只统计经过该节点的所有链(包括以该节点为端点) 每次用桶维护之前的子树中每个路径权值和所对应的最少边数 时间复杂度$O(n \log n)$ #include<iostream> #include<cstriP3964 [TJOI2013]松鼠聚会
题目链接:https://www.luogu.com.cn/problem/P3964 思路:可以发现题目中是求切比雪夫距离和最小,可以先把切比雪夫距离转换成曼哈顿距离。比雪夫距离(x,y),转换成曼哈顿距离就变成了( (x+y)/2,(x-y)/2 )。为了避免浮点数,可以先不除2,最后结果再除2即可。然后对横坐标和纵坐标分别考虑,分BZOJ4545 DQS的trie
Description DQS的自家阳台上种着一棵颗粒饱满、颜色纯正的trie。 DQS的trie非常的奇特,它初始有$n_0$个节点,$n_0-1$条边,每条边上有一个字符。并且,它拥有极强的生长力:某个i时刻,某个节点就会新生长出一颗子树,它拥有$s_i$个节点且节点之间的边上有一个字符,并且新生长出来的子树也是一Mouse Hunt
思路:利用并查集将会出现在同一个房间的下标统一化 在深度遍历中寻找同一房间的下标们消耗最小值 若是在老鼠跳转中出现a[i]=i,则连同同一房间的老鼠们都会去i房间 若是出现回环,则比较回环中的最小值 1 typedef long long ll; 2 typedef pair<int, int> p; 3 typedef unsigned l[NOIP模拟]相遇/行程的交集
Description 豪哥生活在一个 n 个点的树形城市里面,每一天都要走来走去。虽然走的是比较的 多,但是豪哥在这个城市里面的朋友并不是很多。 当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交 往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群后缀数组好题选讲(1)
涉及到的处理问题套路 将字符串复制成两份并连在一起,求出每个字符的后缀排名,再求解 注意事项 注意拼接的字符串中间是否应该加分隔符 luogu P4051 字符加密 题意简述 给定一个长度为$n$的字符串,将其首尾相接,然后从每一个位置开始读出一个长度为$n$的字符串,得到$n$个不同的字符串,将635div2
A秒 #include <bits/stdc++.h> using namespace std; int main () { ios::sync_with_stdio(false); int T; cin>>T; while(T--) { int a,b,c,d; cin>>a>>b>>c>>d; cout<<b<<" "<<c<<"hdu-3038 (带权并查集)
输入样例 10 5 1 10 100 7 10 28 1 3 32 4 6 41 6 6 1 输出 1 因为输入描述的是闭区间,这里求【3-7】是求不出的,必须改为开区间 所以(0,10]=100, (6, 10]=28, (0, 3]=32 之后的问题就简单了 如果某一段区间的值和之前的值冲突则是错的 注意序列中可能存在负数,所以如果(0,1Codeforces Round #611 (Div. 3)
A - Minutes Before the New Year 题意:问现在的时间距离0点0分有多少分钟,提问的时间在0点0分之前,且不是0点0分。 题解:? void test_case() { int h, m; scanf("%d%d", &h, &m); int ans = 0; if(m == 0) ans += (24 - h) * 60; else { ans += (习题:七夕祭(杂题)
题目 思路 首先一点如果是impossible,那么一定 \(T\%N\)和\(T\%M\)都不为0 再接着, 因为竖着满足跟横着满足本质上是一样的,所以这里只讨论横着满足 并且如果要满足横着的情况, 如果要步数最小,那么我们一定不会将竖着的摊位交换 同理,如果要满足竖着的情况,我们一定不会将横着的摊位交Hello 2020
D - New Year and Conference 题意:给两组线段,第一组叫做ai,第二组叫做bi,要求验证是否任意一对(i,j),i!=j,都有:要么ai与aj有交点且bi与bj有交点,要么都没有交点。 题解:比赛的时候想了个分治,但是没想清楚,而且细节没处理好,其实比赛最后一次提交的代码只需要改动10行就可以AC了。 把题目[考试反思]1018csp-s模拟测试78(lrd day2) :规律
zkt没素质果然考炸了! 但是他考炸了和我一个分 这场的状态是真的不好,T3比较简单但没有做,一直干T2结果还是跪了 T1的哈希写挂了,模数比int大了结果一乘就炸long long了。 调了一个小时,傻逼哈希啊调了一个小时。。。心态初崩。 然后看到T2感觉不是特别难就写出来了。少考虑了一种情防线 Defence
这一题写的时候也是懵逼的,想到了大概思路 首先的操作肯定是处理出以 ii 为结尾的最长连续上升序列 那么接下来最朴素的算法可以达到 O(N^2) 有没有更快的做法? 考虑我们枚举的是前 ii 项,那么有些很明显无用的东西被重复枚举了 如果 a[i]>a[j] 并且 g[i]<=g[j] ,那么选 i肯Luogu5546/BZOJ2946 [POI2000]公共串
题目传送门 算法分析 和Sandy的卡片几乎是同一题我们证明了中国OI的POI性。 具体算法分析见Luogu2463/BZOJ4698 [SDOI2008]Sandy的卡片 要注意是否存在完全一样的字符串,此时的分隔符要注意。 代码实现 #include<bits/stdc++.h> using namespace std; #define maxn 200005 #define