一眼望去不会. 考虑问题中的\(f(i,j)=|\sum_{p=i}^{j}​a_p​ |\)的实际意义. 其实就是前缀和相减的绝对值. \(f(i,j)=|\ sum[j]-sum[i-1]\ |\) \(f(i,j)=max(sum[j]-sum[i-1],sum[i-1]-sum[j])\) 那加上x呢. \(f(i,j)=max[(sum[j]+xj)-(sum[i-1]+x(i-1)),(sum[i-1]+x(i-1))-(sum[j]+xj)]\) \(sum[i]+xi\)联想到直…
BZOJ1345 Baltic2007 序列问题Sequence Description 对于一个给定的序列a1,…,an,我们对它进行一个操作reduce(i),该操作将数列中的元素ai和ai+1用一个元素max(ai,ai+1)替代,这样得到一个比原来序列短的新序列.这一操作的代价是max(ai,ai+1).进行n-1次该操作后,可以得到一个长度为1的序列.我们的任务是计算代价最小的reduce操作步骤,将给定的序列变成长度为1的序列. Input 第一行为一个整数n( 1 <= n <=…
链接 luogu 模板一 上下利用斜率求凸包然后合并. #include <bits/stdc++.h> using namespace std; const int N=10005; const double eps=1e-10,inf=0x3f3f3f3f3f3f3f3f; int n,stak[N],top; struct point { double x,y; }a[N]; bool cmp(point a,point b) { return a.x==b.x?a.y<b.y:a…
题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=1069 (luogu)https://www.luogu.org/problemnew/show/P4166 题解: 水题,凸包极角排序之后枚举凸四边形对角线\(i,j\)然后找面积最大的点\(k\),\(k\)随着\(i,j\)是单调的 但是有个易错点,就是双指针那个\(k\)前移的条件必须是前移后大于等于原来,如果写成大于就只有50(详见代码) 查了半天发现原因居然是:…
Subset sequence Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8188 Accepted Submission(s): 3735 Problem Description Consider the aggregate An= { 1, 2, -, n }. For example, A1={1}, A3={1,2,3}. A…
传送门 题意: 给你一个只包含 '(' 和 ')' 的长度为 n 字符序列s: 给出一个操作:将第 i 个位置的字符反转('(' ')' 互换): 问有多少位置反转后,可以使得字符串 s 变为"Regular Bracket Sequence": 输出满足条件的位置的个数: 题解: 令 '(' = 1 , ')' = -1: 定义 sum[i]:括号序列的前缀和: 一个合法的括号匹配串的充要条件是: [1] 对于任何 i,sum[i] ≥ 0: [2] sum[n]=0: int n;…
Serval and Parenthesis Sequence 题目链接(点击) Serval soon said goodbye to Japari kindergarten, and began his life in Japari Primary School. In his favorite math class, the teacher taught him the following interesting definitions. A parenthesis sequence is…
LINK:三维凸包 一个非常古老的知识点.估计也没啥用. 大体上了解了过程 能背下来就背下来吧. 一个bf:暴力枚举三个点 此时只需要判断所有的点都在这个面的另外一侧就可以说明这个面是三维凸包上的面了. 一个问题 :多点共面问题.一个trick:可以利用扰动法然后 就可以解决这个问题了. 正解:\(n^2\)的增量法求三维凸包. 先加入三个不共线的点组成一个面(正反两面然后不断加入点. 然后考虑每一个点 删除这个点可以看到的面 然后边界与新加入的点连边即可. 具体理解看代码(我也有点迷.. co…
LINK:信用卡凸包 当 R==0的时候显然是一个点的旋转 之后再求凸包即可. 这里先说点如何旋转 如果是根据原点旋转的话 经过一个繁杂的推导可以得到一个矩阵. [cosw,-sinw] [sinw,cosw] 这个矩阵就是旋转矩阵 乘一下当前的坐标 [x,y] 就可以得到逆时针旋转w度的答案. 具体的 x'=xcosw-ysinw; y'=xsinw+ycosw. 顺时针转换一下即可.接下来考虑绕某个点进行旋转. 既然已经得到了绕原点旋转的方法了 此时让要旋转点的坐标减参考系的点的坐标 此时就…
There are n integers a 1,a 2,…,a n-1,a n in the sequence A, the sum of these n integers is larger than zero. There are n integers b 1,b 2,…,b n-1,b n in the sequence B, B is the generating sequence of A and bi = a 1+a 2,+…+a i (1≤i≤n). If the element…
题意 给出一个1-n的集合   gcd 集合里面的所有数  得到的 一个 数   然后自己选择删去一个数   要使得到的数 构成的数列 的字典序最大 思路: gcd所有数 那gcd得到的数肯定要小于数组中最小的数  所以 刚开始都是1   所以优先删去1  那就要使gcd所有数经可能快得到 2 如何快速到2 呢 那就是把奇数全部删掉  那剩下得数最小就为2 了  此时为 2 4 6 8 10....  此刻就从2开始删   当n==3时 有 x ,2x,3x  此时 只有 删 x 2 x   3…
Solution 我又双叒叕去看题解啦$QAQ$, 真的想不到鸭 输入 $a$ 和 $n$ 互质, 所以满足 $a \times i \ mod \ n$ $(0<=i<n)$ 肯定是不重复的 根据这一个性质 , 设 满足条件的子串的开头位置为 $s$ 先不考虑$01$, 仅考虑开头位置上的值 $a*s+b$, 设它为$x$, 则它接下来第 $i$ 位的值为 $x+(i-1)*a$ 若那个位置上的字符为 $0$, 则 $0<=x+(i-1)*a<p$, 反之 $p<=x+(i…
https://vjudge.net/problem/POJ-1019 题意 给一串1 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011这种形式的串,问这个串的第i个位置的数字是什么. 分析 这道题的重点在于到第k组时应该为几位数,即对于某个数x,它应该为几位数.答案是log10(x)+1.这样剩下的便是打表预处理了,找出每组的起始位置,再处理出一个最长的组. #include<iostre…
题目链接:传送门 题目大意: 两个长度为n的二进制串s,t,每次操作可以将s串的一段区间取反.求操作exactly twice后使得s=t的方法数. 思路: 连续的尽可能长的 si ≠ ti 的区间简称A,连续的尽可能长的 si = ti 的区间简称B. 则1-n可以划分为若干个AB交替出现,要求操作exactly twice后s=t,就是消去所有的A. 发现每次操作最多只能使得A的数量减少1个. 所以若对于给出的s,t: ① cnt(A) ≥ 3: 不能完成,方法数为0. ② cnt(A) =…
清晰明了%%% Fairycastle的博客 个人习惯把size什么的存在左偏树结点内,这样在外面好写,在里面就是模板(只用修改update). 可以对比一下代码(好像也差不多-) MY CODE #include <vector> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 1000005; struct lt…
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define ll long long #define maxn 100034 using namespace std; ll a[maxn]; int main() { // setIO("input"); int n; scanf("%d",&n); fo…
题意 : 给出一个数 n ,要求你用 k 个二的幂来组成这个数,要求输出这 k 个二的幂的指数,如果有多解情况则优先输出最大指数最小的那一个且要求按字典序输出,不存在则输出 No 分析 :  先来说一个结论对于一个二的幂例如 2^n 我们可以将其拆成 2^(n-1) + 2^(n-1) 那么对于题目所给出的数 n 我们可以先将其拆成二进制形式,如果当前二进制表示法中 1 的个数已经超过 k 则应该是输出 No 也就是说无论怎么转化都不可能有用更少的二的幂的个数来表示这个数,只能更多,也就是利用上…
Codeforces Round #529 (Div. 3) 题目传送门 题意: 给你由左右括号组成的字符串,问你有多少处括号翻转过来是合法的序列 思路: 这么考虑: 如果是左括号 1)整个序列左括号个数比右括号多 2 2)在这个位置之前,所有位置的前缀左括号个数都不少于前缀右括号个数 3)在这个位置和这个位置之后,在修改后所有位置的前缀左括号个数减去前缀右括号个数大于2 (这里这么想,把左变成右,左-1,右+1) 右括号也是这样 代码: #include<bits/stdc++.h> usi…
B.super_log (欧拉降幂) •题意 定一个一个运算log*,迭代表达式为 给定一个a,b计算直到迭代结果>=b时,最小的x,输出对m取余后的值 •思路 $log*_{a}(1)=1+log*_{a}(0)=1-1=0$ $log*_{a}(a)=1+log*_{a}(log_{a}(a))=1+log*_{a}(1)=1$ $log*_{a}(a^{a})=1+log*_{a}(a)=2$       .... 以此类推得$log*_{a}(a^{a^{a^{a^{a^{...}}}}…
Luogu P2742 模板-二维凸包 之前写的实在是太蠢了.于是重新写了一个. 用 \(Graham\) 算法求凸包. 注意两个向量 \(a\times b>0\) 的意义是 \(b\) 在 \(a\) 的左侧,于是可以用这个方法判断是否弹点. 写的时候注意细节:确定原点时的比较和排序时的比较是不同的,并且排序时不要把原点加入. #include<bits/stdc++.h> using namespace std; #define ll long long #define mp ma…
Luogu 4724 三维凸包 增量法,维护当前凸包,每次加入一个点 \(P\) ,视其为点光源,将可见面删去,新增由"晨昏线"(分割棱)与 \(P\) 构成的平面. 注意每个平面表面积为其三个端点算出的法向量模长一半. 参考讲解. #include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> inline int read() { int…
ACM思维题训练集合 A bracket sequence is a string, containing only characters "(", ")", "[" and "]". A correct bracket sequence is a bracket sequence that can be transformed into a correct arithmetic expression by inserting…
题解: 二维凸包裸题 按照x坐标为第一关键字,y坐标为第二关键字排序 然后相邻判断叉积用单调队列搞过去 正反都做一次就好了 代码: #include <bits/stdc++.h> using namespace std; #define rint register int #define IL inline #define rep(i,h,t) for (int i=h;i<=t;++i) #define dep(i,t,h) for (int i=t;i>=h;--i) con…
题目链接:https://www.luogu.org/problemnew/show/P1031 题目描述有 $N$ 堆纸牌,编号分别为 $1,2,…,N$.每堆上有若干张,但纸牌总数必为 $N$ 的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为 $1$ 堆上取的纸牌,只能移到编号为 $2$ 的堆上:在编号为 $N$ 的堆上取的纸牌,只能移到编号为 $N-1$ 的堆上:其他堆上取的纸牌,可以移到相邻左边或右边的堆上. 现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都…
原题传送门:P2787 语文1(chin1)- 理理思维 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树跑的飞快,但还是没有memset0小姐姐跑得快 操作1:暴力统计出奇迹 操作2:推平区间,珂朵莉树基本操作 操作3:排序区间,我就写了一个桶排 窝一开始头文件直接用bits出玄学ce toupper是把小写转大写,以防数据出锅 #pragma GCC optimize("O3") #include<cstdio> #include<c…
嘟嘟嘟 没错,我开始学凸包了. 其实挺简单的. 前置技能: 1.极坐标系 2.向量叉积 1.极坐标系 就是一种二维坐标系.只不过两个坐标分别表示向量和极轴的角度和自身的长度.对于不同的问题,极轴可以自己选取. 2.向量叉积 不说了 算法是\(Graham\)扫描法,下面讲一下实现步骤: 1.在所有点中找到横坐标最小的点作为极点,如果有多个,取纵坐标最小的点. 2.对于其他\(n -1\)个点进行极角排序,极角相同比较到极点距离. 排完序后的图大概是这个样子的: 其中的字母就是排完序后的序号. 3…
Sequence in the Pocket Time Limit: 1 Second      Memory Limit: 65536 KB DreamGrid has just found an integer sequence  in his right pocket. As DreamGrid is bored, he decides to play with the sequence. He can perform the following operation any number…
题目传送门 /* 定义两个数组,l[i]和r[i]表示第i个数左侧右侧接近它且值是a[i]因子的位置, 第i个数被选择后贡献的值是(r[i]-i)*(i-l[i]),每个数都枚举它的因子,更新l[i], r[i],复杂度O(n*sqrt(a[i])) */ #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <map> using…
P2787 语文1(chin1)- 理理思维 题目背景 蒟蒻HansBug在语文考场上,挠了无数次的头,可脑子里还是一片空白. 题目描述 考试开始了,可是蒟蒻HansBug脑中还是一片空白.哦不!准确的说是乱七八糟的.现在首要任务就是帮蒟蒻HansBug理理思维.假设HansBug的思维是一长串字符串(字符串中包含且仅包含26个字母),现在的你,有一张神奇的药方,上面依次包含了三种操作: 获取第x到第y个字符中字母k出现了多少次 将第x到第y个字符全部赋值为字母k 将第x到第y个字符按照A-Z的…
C. Vasily the Bear and Sequence time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Vasily the bear has got a sequence of positive integers a1, a2, ..., *a**n*. Vasily the Bear wants to write o…