题目: 这题我WA了3次,那3次是用向量求角度去重算的,不知道错在哪了,不得不换思路. 第4次用斜率去重一次就过了. 注意:n定义成long long,不然求C(3,n)时会溢出. 代码: #include <bits\stdc++.h> using namespace std; typedef long long ll; struct point{ int x;int y; }a[]; map <long double,int>::iterator it; int main()…
思路:斜率优化 提交:\(2\)次 错因:二分写挂 题解: 首先观察可知, 对于点\(f(X,Y)\),一定是由某个点\((1,p)\),先向下走,再向右下走. 并且有个显然的性质,若从\((1,p)\)向下走,则\(a[p]=min(a[i]),i\in [p,Y]\)(要不然直接从后面的更小的那个位置向下走,再向右下走) 还有一个显然的性质,若\(i<j\)且\(i\)比\(j\)更优,则\(a[i]>a[j]\)(上面的结论) 设\(s[i]=\sum_{j=i}^i a[j]\) 那么…
一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值. 每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上.      5   8 4  3 6 9 7 2 9 5   例子中的最优方案是:5 + 8 + 6 + 9 = 28   Input 第1行:N,N为数塔的高度.(2 <= N <= 500) 第2 - N + 1行:每行包括1层数塔的数字,第2行1个数,第3行2个数......第k+1行k个数.数与数之间用空格分隔(0 <= A[i…
https://vjudge.net/problem/UVALive-3720 题意: 有一个n行m列的点阵,问一共有多少条非水平非垂直的直线至少穿过其中的两个点. 思路: 没思路的题. 首先枚举矩形的大小,如果矩形的长宽互质,说明该斜率没出现过. 如图,1×1的矩阵的长宽互质,可以形成如图16条的直线(以1×1的矩阵为单位计算),但是如果放在整个矩阵来看,有些直线是可以合为一条直线的. 如果长宽gcd=2的话,说明该斜率的直线已经计算过了,我们要减去重复计算的. 如图,以2×2的矩阵为单位,减…
有一个括号序列,现在要计算一下它有多少非空子段是合法括号序列. 合法括号序列的定义是: 1.空序列是合法括号序列. 2.如果S是合法括号序列,那么(S)是合法括号序列.3.如果A和B都是合法括号序列,那么AB是合法括号序列. Input 多组测试数据. 第一行有一个整数T(1<=T<=1100000),表示测试数据的数量. 接下来T行,每一行都有一个括号序列,是一个由'('和')'组成的非空串. 所有输入的括号序列的总长度不超过1100000. Output 输出T行,每一行对应一个测试数据的…
# 时间复杂度O(n^2) function fn(arr) { return arr.filter((item, index, arr) => arr.indexOf(item) === index) } # 时间复杂度o(n) function fn(arr) { let obj = {}; arr.forEach((item) => { obj[item] = ''; }) return Object.keys(obj) }…
1315 合法整数集 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一个整数集合S是合法的,指S的任意子集subS有Fun(SubS)!=X,其中X是一个固定整数,Fun(A)的定义如下: A为一个整数集合,设A中有n个元素,分别为a0,a1,a2,-,an-1,那么定义:Fun(A)=a0 or a1 or - or an-1:Fun({}) = 0,即空集的函数值为0.其中,or为或操作. 现在给你一个集合Y与整…
LeetCode 287. Find the Duplicate Number 暴力解法 时间 O(nlog(n)),空间O(n),按题目中Note"只用O(1)的空间",照理是过不了的,但是可能判题并没有卡空间复杂度,所以也能AC. class Solution: # 基本思路为,将第一次出现的数字 def findDuplicate(self, nums: List[int]) -> int: s = set() for i in nums: a = i in s if a…
给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0).   Input 第1行:一个数T,表示输入的测试数量(1 <= T <= 10000),之后每4行用来描述一组测试数据. 4-1:三个数,前两个数为圆心的坐标xc, yc,第3个数为圆的半径R.(-3000 <= xc, yc <= 3000, 1 <= R <= 3000) 4-2:2个数,三角形第1个…
小b有一个仅包含非负整数的数组a,她想知道有多少个三元组(i,j,k),满足i<j<k且a[i],a[j],a[k]可能作为某个三角形的三条边的边长. 收起   输入 第一行输入一个正整数n,表示数组a中元素个数: 第二行n个非负整数,表示a中元素,以空格隔开: 其中0<n≤1000,a中任意元素a[i]满足0≤a[i]≤1000. 输出 输出一个数,表示满足题意的三元组个数 输入样例 4 2 2 3 4 输出样例 3排序,然后枚举两个边,找满足条件的第三条边的个数.代码: #inclu…