首页 > TAG信息列表 > Tot
LeetCode 1151 Minimum Swaps to Group All 1's Together 滑动窗口
Given a binary array data, return the minimum number of swaps required to group all 1’s present in the array together in any place in the array. Solution 注意这里的交换 \(swap\) 并不是相邻两个元素的,而是任意位置的都可以。所以我们需要找到一个区间,使得所有1变换Codeforces Round #820 (Div. 3) G. Cut Substrings dp计数
https://codeforces.ml/contest/1729/problem/G https://zhuanlan.zhihu.com/p/563809110 分析: 就是把主串中所有跟子串匹配的位置删掉,问最少删除多少次能够满足主串中不再出现子串,并问满足最少删除次数的方案数有多少个 f[i]:[1,i] 必须删除[i-m+1,i] 的子串,总共的最少删除次数高精度斐波那契快读代码(解决第⑩篇文章问题
相关链接:https://www.cnblogs.com/TFLSc1908lzs/p/13531804.html 满分代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,tot; 4 int ans[105][1000005]; 5 void figure(int x){ 6 for(int i=3;i<=x;i++){ 7 for(int j=1;j<=tot;j++C20220805T2 赌徒
设手中硬币的大小为 \(a\) 和 \(b\) ,对手硬币的两面是 \(a_i\) 和 \(b_i\) ,那么单次游戏的收益就是 \[\frac{1}{4}x_i(f(a,a_i)+f(a,b_i)+f(b,a_i)+f(b,b_i)) \]其中 \(f(x,y)=(x\geq y)?\,1:-1\) 如果将式子的括号拆开,会发现单次游戏的收益分别与 \(a_i,b_i\) 有关,那么可以进一步题解 AT5635 Shortest Path on a Line(线段树优化建图)
题解 AT5635 Shortest Path on a Line Description 题目传送门 题面翻译 有一张有 \(N\) 个点,编号为 \(1 - N\) 的无向图。 做 \(M\) 次操作,每次操作给出三个正整数 \(L,R,C\),对于每对 \(≥L\) 且 \(≤R\) 的整数对 \((S,T)\) ,在 \((S,T)\) 之间添加一条长度为 \(C\) 的边 完成操Jeffrey's ambition(Dinic板子题)
Jeffrey's ambition(网络流板子题) 网路流的经典例题,会有两种需要匹配的东西,这两种东西直接可以构成一个二分图,这时候题目就会要求你求出最大匹配(水题) //要与这道Arrange the Bulls题目区分开来。两道题同样是找匹配,但是一个是问你匹配的可能总数,而且题目是一定能构成最大匹配的,且优先队列-2386. 找出数组的第 K 大和
问题描述 给你一个整数数组 nums 和一个 正 整数 k 。你可以选择数组的任一 子序列 并且对其全部元素求和。 数组的 第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复) 返回数组的 第 k 大和 。 子序列是一个可以由其他数组删除某些或不删除元素排生而来的数1706C - Qpwoeirut And The City
/* * |~~~~~~~| * | | * | | * | | * | | *做题记录:P4013 数字梯形问题
首先这题是最大费用最大流。 然后几乎没什么细节好主意的。 遵守以下规则: 梯形的第一行有 mm 个数字。 从梯形的顶部的 mm 个数字开始 在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径。 scanf("%lld%lld",&m,&n); s=1e6,t=1e6+1;//p[i][j]为点(i,cf1718 B Fibonacci Strings
solution 当ai为Fib数的时候,他一定在串中是全部连续的,不然就g,因为把他分解成小的Fib数必定连续。 一个数字不能拆成两个连续的fib数。 \(f_i=\sum_{j=1}^{i-2}f_j+1\) 考虑最大的ai出现的区间。 f[x] f[x+1] f[x+2] 显然当(f[x+1],f[x+2])区间中有三个以上的ai就嘎了,tot都没他大 有P3605 [USACO17JAN]Promotion Counting P 题解
solution 考虑权值线段树合并:首先离散化,然后对于一个节点,我们将它的所有子树合并上来,并统计所有能力指数的个数(权值线段树基本操作),查询时只需查询 \(p_i+1\sim n\) 的和即可 code #include <bits/stdc++.h> #define Tp template<typename Ty> #define Ts template<typename Ty,typlouguP3966 [TJOI2013]单词【AC自动机】
小时候一直不理解为什么老人会呆呆地坐着,望着远方很久很久 少年不会知道自己的勇气意味着什么,他只是在武汉四十度的天气下奋力奔跑。在军训伊始终于成功联系上了导师,一个小时内赶出简历,基于事实发展创造:),既对自身能力惶惶,又隐隐有些期待。我从没想过自己连复读的经历都能拿来利算法竞赛进阶指南 0x65 负环与差分约数
这里与最短路密切相关 可以使用spfa,利用spfa的原理(cnt数组),如果发现一个点是通过了超过n-1条边更新而来,那么就说明存在负环 AcWing361. 观光奶牛 给定一张 L 个点、P 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。 求图中的一个环,使“环上各点的权值之和”除以“【DS】浅谈树状数组倍增
无意中看到的一个小 trick,便记录下来。 引入 给您一个数组,您需要实现以下操作和询问: \(\bullet\) 插入一个数字 \(x\)。 \(\bullet\) 查询排名为 \(k\) 的数 \(x\)。 显然我们有权值线段树或者平衡树的做法。 但是我偏不(傲娇),我们来考虑树状数组怎么做。 树状数组倍增 定义: \(n搜索细节
#include<iostream> #include<math.h> using namespace std; int x[20],n,k; bool isprime(int n){ int s=sqrt(double(n)); for(int i=2;i<=s;i++){ if(n%i==0)return false; } return true; } int rule(int choose_left_num,int alrhdu7215 Weighted Beautiful Tree
problem 一个点的点权的可能为不变或者变为连着的边的边权。 然后dp、 dp[u][0]表示变成大于等于w[u]边的最小代价。 dp[u][1]表示变成小于等于w[u]边的最小代价。 然后对边权排序。 一段连续的是使用dp[][0]的和 一段连续的是使用min(dp[][0],dp[][1])的和 一段连续的是使用dp[][CF512D Fox And Travelling(DP 计数)
CF512D Fox And Travelling 给定一张 \(n\) 个点 \(m\) 条边的无向图,每次选择一个叶子结点并将它和连接它的边删除。 对于每个 \(k\in[0,n]\),问有序选择 \(k\) 个点的方案数。 \(n\le 100\)。 显然如果有环,那么所有环上的点都无法被选择,可以选择的只是一棵棵树。 按照是否有环,可AcWing-4507. 子数组异或和
异或的一个性质:如果对一个数异或了两次就相当于不异或。 所以我们可以用前缀和预处理 \(a[i]\oplus =a[i-1]\) \(i\) 至 \(j\) 的异或和为 \(a[j]\oplus a[i-1]\) 该连续子数组的前一半元素的异或和等于其后一半元素的异或和。 即该连续子数组的异或和为 \(0\) 。 暴力的解法: #incdfs序 括号序 欧拉序 树上莫队 虚树建立 傻傻分不清
括号序 进加一次,出加一次,显然最后得到的序列只有 \(2n\) 个点。 void dfs(int x) { in[x]=++tot; for(y) dfs(y); out[x]=++tot; } 显然我们希求将树上路径表示为区间,然后用莫队抑或是其它数据结构维护。 对于 \(y\in T_x\) 的情况就是上图,我们发现只要取 \([in_x,in_y]\)【题解】「JOI 2015 Final」JOI 公园
Description Solution Code #include <cstdio> #include <algorithm> #include <queue> #define int long long using namespace std; const int MAXN = 1e5 + 10, MAXM = 4e5 + 5, INF = 1e18; int n, m, C; int head[MAXN], nxt[MAXM], ver[MAXM], edge[如何计算 LIS
LIS,即最长上升子序列 . 基于 DP 的做法 令 \(dp_i\) 表示以 \(i\) 结尾的 LIS 长度,则有 \[dp_i=1+\max_{\substack{j<i\cr a_j<a_i}}\{dp_j\} \]可以直接暴力转移,于是答案就是 \(\displaystyle\max_{i\in[1,n]}dp_i\) . 时间复杂度 \(O(n^2)\) . 优化方法(均为 \(O(n\log n)\)): 线CF1221G Graph And Numbers
written on 2022-05-06 鸣谢@uid13237的代码提供了我能理解的思路 这是一道计数题。 初见这题,有些束手无策,但是题目给出了三个限制,那么我们对于这种有限制的计数题,可以考虑容斥。 大体思路就是容斥,想到这点,后面的大部分过程就很简单了,中间的过程可以参照这篇题解的,因为懒得打了。Codeforces Round #810 (Div. 2) C.Color the Picture,大胆猜测+一点模拟
题目给定若干段颜色,还有每个颜色能涂的max个数 求能否满足相邻方格必须同一个颜色,规定相邻方格必定为4个,如果跨边界了也要考虑(比如第1行的上面的方块就是第n行 样例给出的染色方案是整列整列染过去,现场的时候思考了一下除了整列整行的染,有没有其他方案? 没有,因为如果有的话,必然堆板子计划
LCT*1 struct LCT_Tree{ #define lch V[p].son[0] #define rch V[p].son[1] #define Isroot(p) (V[V[p].fa].son[0]!=p && V[V[p].fa].son[1]!=p) #define Son(p) (V[V[p].fa].son[1]==p) struct Vertex{int son[2],siz,sum,t1,fa;}V[maxn]; int tot; int New(洛谷P3369 【模板】普通平衡树(无旋treap数组版)
题目传送门:https://www.luogu.com.cn/problem/P3369 模板: 1 #include<cstdio> 2 #include<cstring> 3 #include<cstdlib> 4 #include<iostream> 5 using namespace std; 6 const int MAXN = 100005; 7 const int MOD = 2147483647; 8