首页 > 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,typ

louguP3966 [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 alr

hdu7215 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\) 。 暴力的解法: #inc

dfs序 括号序 欧拉序 树上莫队 虚树建立 傻傻分不清

括号序 进加一次,出加一次,显然最后得到的序列只有 \(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