cstring

【模板】deque实现单调队列

浪尽此生 提交于 2020-05-06 10:54:21
双端队列 deque 容器: 关于 deque 最常用的有这几个函数 : 都是成员函数 双端队列模板题: 【洛谷】P2952 [USACO09OPEN]牛线Cow Line 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<deque> 6 using namespace std; 7 8 int n, cnt; 9 deque< int > q; 10 11 int main() { 12 scanf( " %d\n " , & n); 13 char s[ 21 ]; 14 for ( int i= 1 ; i<=n; ++ i) { 15 gets(s); 16 if (s[ 0 ] == ' A ' ) 17 if (s[ 2 ] == ' L ' ) q.push_front(++ cnt); 18 else q.push_back(++ cnt); 19 if (s[ 0 ] == ' D ' ) { 20 int m = 0 , j = 1 ; 21 while (s[j]< ' 0 ' || s[j]> ' 9 ' ) ++ j; 22 while (s[j]>= ' 0 ' && s[j]<= ' 9 ' ) 23 m = (m

洛谷1419 寻找段落(单调队列)

独自空忆成欢 提交于 2020-05-06 09:11:20
洛谷1419 寻找段落 本题地址: http://www.luogu.org/problem/show?pid=1419 题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值。现在需要找出序列中最有价值的“段落”。段落的定义是长度在[S,T]之间的连续序列。最有价值段落是指平均值最大的段落, 段落的平均值=段落总价值/段落长度。 输入输出格式 输入格式: 第一行一个整数n,表示序列长度。 第二行两个整数S和T,表示段落长度的范围,在[S,T]之间。 第三行到第n+2行,每行一个整数表示每个元素的价值指数。 输出格式: 一个实数,保留3位小数,表示最优段落的平均值。 输入输出样例 输入样例#1: 3 2 2 3 -1 2 输出样例#1: 1.000 说明 【数据范围】 对于30%的数据有n<=1000。 对于100%的数据有n<=100000,1<=S<=T<=n,-10000<=价值指数<=10000。 【题目来源】 tinylic改编 【思路】 二分+单调队列。 首先二分最大平均值x。 那么问题就转化为:是否存在一个区间的的平均值大于x。这个问题可以类比于UVa11090 Going in Cycle!!,我们将a全部减去x,问题进一步转化为判断是否存在一个长度在s..t范围内的区间它的和为正,如果有说明还有更大的平均值。 如何判断?单调队列。 令sum表示a

ACM自闭之路1——论青蛙的危害 POJ1061-两只青蛙的约会

强颜欢笑 提交于 2020-05-06 07:03:27
先放题目: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 Input 输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。 Output 输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible" Sample Input 1 2 3 4 5 Sample Output 4 其实这道题的题意还是比较好理解的

D. Gourmet choice并查集,拓扑结构

微笑、不失礼 提交于 2020-05-06 03:39:51
D. Gourmet choice time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Mr. Apple, a gourmet, works as editor-in-chief of a gastronomic periodical. He travels around the world, tasting new delights of famous chefs from the most fashionable restaurants. Mr. Apple has his own signature method of review — in each restaurant Mr. Apple orders two sets of dishes on two different days. All the dishes are different, because Mr. Apple doesn't like to eat the same food. For each pair of dishes from different days he remembers exactly which was

Re:Exgcd解二元不定方程

孤街醉人 提交于 2020-05-06 03:39:32
模拟又炸了,我死亡 $exgcd$(扩展欧几里德算法)用于求$ax+by=gcd(a,b)$中$x,y$的一组解, 它有很多应用,比如解二元不定方程、求逆元等等, 这里详细讲解一下$exgcd$的原理。 了解$exgcd$算法前,需要$gcd$算法做铺垫。 gcd,又称辗转相除法,用于计算两个整数 $a,b$ 的最大公约数。 $gcd$函数的基本性质: $gcd(a,b)=gcd(b,a) $ $gcd(a,b)=gcd(-a,b) $ $gcd(a,b)=gcd(|a|,|b|)$ $gcd(a,b)=gcd(b,a$ $mod$ $b)$ 证明一下第四条: 设$k$为整数 设$gcd(a,b) = d$ $a$ $mod$ $b=a-kb$,$k = a/b$ 因为$a$ $mod$ $d=0,b$ $mod$ $d=0$ 所以$kb$ $mod$ $d=0$, $a-kb$ $mod$ $d=0$ 即$(a$ $mod$ $b)$ $mod$ $d=0$ int gcd( int a, int b){ if (b == 0 ){ return a; } return gcd(b,a% b); }   gcd   理解了$gcd$,再来证明为什么$exgcd$可以求出$ax+by=gcd(a,b)$的$x,y$。 当$b=0$时,$gcd(a,b) = a$,$ax+by$ 即

迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少

落爺英雄遲暮 提交于 2020-05-05 23:23:41
首先来一段百度百科压压惊。。。 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。 让我来翻译一下: Dijkstra可以求出一个点到一个图中其他所有节点的最短路径,故也称对于单源最短路径的一种解法 算法实现步骤: a.初始时,只包括源点,即S = {v},v的距离为0。U包含除v以外的其他顶点,即:U ={其余顶点},若v与U中顶点u有边,则(u,v)为正常权值,若u不是v的出边邻接点,则(u,v)权值 ∞; b.从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。 c.以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。 d.重复步骤b和c直到所有顶点都包含在S中。 动画模拟: 普通版Dijkstra代码如下: #include<iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int map[

LOJ#10002. 「一本通 1.1 例 3」喷水装置

你说的曾经没有我的故事 提交于 2020-05-05 21:47:41
#10002. 「一本通 1.1 例 3」喷水装置 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: 1bentong 提交 提交记录 统计 讨论 1 测试数据 题目描述 长 LL L 米,宽 WW W 米的草坪里装有 nn n 个浇灌喷头。每个喷头都装在草坪中心线上(离两边各 W2\frac{W}{2} ​ 2 ​ ​ W ​​ 米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。 请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头? 输入格式 输入包含若干组测试数据。 第一行一个整数 TT T 表示数据组数; 每组数据的第一行是整数 nn n、 LL L 和 WW W; 接下来的 nn n 行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况)。 输出格式 对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开也不能浇灌整块草坪,则输出 −1-1 − 1 。 样例 样例输入 3 8 20 2 5 3 4 1 1 2 7 2 10 2 13 3 16 2 19 4 3 10 1 3 5 9 3 6 1 3 10 1 5 3 1 1 9 1 样例输出 6 2 -1 数据范围与提示 对于 100%100\% 1 0

OpenCV与MFC实战之图像处理 样本采集小工具制作 c++MFC课程设计

感情迁移 提交于 2020-05-05 18:11:01
原文作者:aircraft 原文链接: https://www.cnblogs.com/DOMLX/p/12111102.html      入门不久的人可以通过opencv实战来锻炼一下学习opencv的成果,百度云链接: 链接:https://pan.baidu.com/s/1jGOD97Zx96ZDAvlkQtaPYQ 提取码:afip 运行环境VS2017,需要配置库为:opencv 题目:样本采集小工具 需求: 用 MFC 和 opencv 完成样本采集小工具。 界面功能 1、 选中原图片集的目录。 2、 选择当前是正样本还是负样本?并选中其目录。 3、 通过上一张下一张更换原图片集的图片显示。 鼠标点击图片显示区域功能 1、 左击图片选中,以鼠标点击处为中心,宽 W* 高 H 的区域。 2、 鼠标滚轮上滚扩大选中区域。 3、 鼠标滚轮下滚缩小选中区域。 4、 右击保存选中区域的图片在正样本或负样本的目录下,取决于当前选中正样本还是负样本。 完成界面如图: 第一步:把MFC界面的那些控件都拖动好并且绑定好opencv图形框 在MFC的初始化函数中添加我们的绑定代码: BOOL CpicroiDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作

codeforces 1197D-Yet Another Subarray Problem

让人想犯罪 __ 提交于 2020-05-05 17:45:11
传送门: QAQQAQ 题意:给你一个序列,求一个子序列a[l]~a[r]使得该子序列的sum(l,r)-k*(r-l+1+m+1)/m值是在所有子序列中最大的,并输出最大值 思路:比赛的时候使用O(n)写的,但是被hack了,因为O(n)无法记录当前距离下一次-k还有多少,若用单调队列维护也不知道前面应该弹出多少(可能现在把前面弹出是最优的,但是到后面可能因为个数还没到m的倍数,把前面加进去又是最优的),所以我们考虑再加一维 法一:dp[i][j]表示序列到i截止,这一轮已经进行了j次取数(j=(len+m-1)%m),那么dp[i][j]维护的就是起点为s=i-j+1-m*t(t>=0)这个集合的最优,这样所有的dp[i][j]就可以维护以i截止的最优答案了 对于当前i更新有两种情况:第一种是只取当前这个a[i]这个在dp[i][1]特判即可             第二种是还要取前面的,dp[i][j]从dp[i-1][j-1](因为dp[i-1][j-1]所维护的s集合和dp[i][j]所维护的s集合是一样的)转移即可(注意边界条件) (之前HCY玄学又加了一层循环更新,一直看不懂,后来发现他虽然答案是对的,但m次更新中只有1次是有效的) #include<iostream> #include <cstdio> #include <algorithm> #include

[POJ3523]The Morning after Halloween

老子叫甜甜 提交于 2020-05-05 16:29:11
Description You are working for an amusement park as an operator of an obakeyashiki , or a haunted house, in which guests walk through narrow and dark corridors. The house is proud of their lively ghosts, which are actually robots remotely controlled by the operator, hiding here and there in the corridors. One morning, you found that the ghosts are not in the positions where they are supposed to be. Ah, yesterday was Halloween. Believe or not, paranormal spirits have moved them around the corridors in the night. You have to move them into their right positions before guests come. Your manager