摘要:
容易看出答案就是C(n,m)。。。 然后高精乘一下就可以了。 对n!分解质因数时,质数p的出现次数是n/p+n/p^2+n/p^3+... 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algor 阅读全文
摘要:
考虑线段树。对于一段区间,记录它的最大斜率和只考虑区间内约束的答案。 合并时一段区间的答案就是左子区间的答案加上右子区间考虑左子区间约束之和的答案。 求一个区间约束为h的答案时,判断左子区间与h的关系。如果不大于h,答案就是右子区间约束为h的答案,否则递归左子区间。 时间复杂度O(nlog2n) 代 阅读全文
摘要:
将左括号记为1,右括号记为-1,则一个合法的括号序列满足所有的前缀和非负。 用splay维护。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespac 阅读全文
摘要:
不知道为什么,用模拟退火就WA了。。。 显然如果知道了总共购买几次,就可以贪心地求出答案。那么套个爬山就行了。 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<cstring> 5 #include 阅读全文
摘要:
这题正解是半平面交,但可以用模拟退火水过。。。 用模拟退火求x的值,然后二分求y的值就可以了。 当所有端点到这个点的直线按逆时针顺序时这个点可以看到任何位置。 代码: 1 #include<iostream> 2 #include<cstdlib> 3 #include<cstring> 4 #in 阅读全文
摘要:
题目大意: 已知N个正整数:A1、A2、……、An 。今要将它们分成M组,使得各组数据的数值和最平均,即各组的均方差最小。 思路: 考虑模拟退火。每次先对每个数随机分在哪个组,然后每次退火随机一个数x,将其换到组y,取y时按温度分类: 若温度高,则此时不稳定,y取温度最小的组。 若温度低,则此时已经 阅读全文
摘要:
模拟退火裸题(输出"nan nan"可以AC) 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<cstdlib> 6 using namespace std; 7 阅读全文
摘要:
令a[i]表示第i行总共加了a[i],a[j]表示第j列总共加了a[j],得到k个方程: a[i1]+a[j1]=c1 a[i2]+a[j2]=c2 ... a[ik]+a[jk]=ck 将i,j看成点,一遍dfs求出a并判断是否合法即可。 代码: 1 #include<iostream> 2 #i 阅读全文
摘要:
代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 #define N 800010 8 #d 阅读全文
摘要:
得到n+1个方程: (a1 1-x1)2+(a1 2-x2)2+..+(a1 n-xn)2=r2 (a2 1-x1)2+(a2 2-x2)2+..+(a2 n-xn)2=r2 ... (an+1 1-x1)2+(an+1 2-x2)2+..+(an+1 n-xn)2=r2 将后n个方程减去第一个方程 阅读全文