随笔分类 - ACM题解
摘要:Nim游戏 HDU1846 若各堆石子异或和为不为零,则先手胜 ,后手当且仅当异或和为零时取胜 此题问要想先手取胜第一步的取法,考虑到上述引理,只需遍历一遍石子找到异或和的最高位匹配的个数。 int a[105]; int main() { int m; while (scanf("%d", &m)
阅读全文
摘要:第一做容斥原理,开始真的不太好理解 题意:给出a,b<=1e19 n<=1e9 ,问[a,b]中与n互质的个数 考虑[a,b]中与n不互质的个数,对n唯一分解定理,与n不互质的个数即为n/p,但是考虑到会有重复,且若数字个数是奇数则要+,偶数减去,因此借助二进制遍历每一种情况(极其神奇的思想) 代码
阅读全文
摘要:给出n给点,求出最大的三角形的面积 有用的点只有凸包上的点,因此只需枚举凸包上的点即可 数据比较简单,暴力即可 #include<iostream> #include<unordered_map> #include<algorithm> #include<string> #include<cmath
阅读全文
摘要:给出n个点,计算从0开始每加入一个点最近点对点的距离的平方,累加答案 思路:用模板直接暴力复杂度太高,考虑平衡树来支持插入操作(set) 由于此题只涉及点的操作,无需写大量计算几何模板,直接利用分治求最近点对,加入以后check最近的即可 #include<iostream> #include<un
阅读全文
摘要:非常好的数论题 结合了很多不知道的知识点 易得代码 #include<iostream> #include<unordered_map> #include<algorithm> #include<string> #include<cmath> #include<cstring> #include<v
阅读全文
摘要:第一问: 我们知道10的n次位数是n+1,2的p次等于10的log(10)2p ,所以结果就是log(10)2p+1 ,直接用库函数即可 第二问 考虑用大数快速幂对最后500位计算答案即可 此题学到的知识点 java大数取模,pow,快速幂模板 import java.util.*; import
阅读全文
摘要:易得知 答案为 对于方程 2x+y=n的每个正整数解的 关于x,y的全排列,这里用到全排列公式 由于答案会很大 ,考虑java高精度 import java.util.*; import java.math.*; public class Main { public static void main
阅读全文
摘要:java可做 先用C++打出表发现如下规律: 若n对应答案为x ,则下一个不同答案对应的n为x+1 不同答案的递推关系有 f[n]=4*f[n-1]-f[n-2] ,因此可java秒 import java.util.Scanner; import java.math.BigInteger; pub
阅读全文
摘要:java初学 借鉴他人代码 求R的n次,R是小数 import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner in=new Scanner(S
阅读全文
摘要:紫书中给出的解法是分块,非常重要的思想, 但是网上题解给出的更加简单DFS ,统计每位数对答案的贡献即可。 注意边界 具体见代码 #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector
阅读全文
摘要:给出一DAG,求最小多少个控制点,能够使得控制图中所有点,控制点可以控制本身和他直接能到的点 题解:只需按拓扑序控制每个点即可 #include<iostream> #include<string> #include<unordered_map> #include<cmath> #include<c
阅读全文
摘要:容易发现同一连通块的答案相等 ,故可以一次遍历图中empty点的答案并保存,保存方法可以建立一个数组,下表是对应的连通块序号 #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector>
阅读全文
摘要:转自洛谷 作者EndSaH #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<algorithm> #
阅读全文
摘要:#include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<algorithm> #include<queue>
阅读全文
摘要:#include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<algorithm> #include<queue>
阅读全文
摘要:输入整数a,b (0<a<b<500) ,输出最佳表达式 使得加数个数尽量小,如果加数个数相同,则最小的分数越大越好 ,输出表达式 考虑从小到大枚举深度上限maxd,每次执行只考虑深度不超过maxd的结点。当前的结点n的深度为g(n),乐观估价函数为h(n),则当 g(n)+h(n)>maxd时应该
阅读全文
摘要:但是我们还不是很清楚每一次的状态怎么储存?我们可以用一个结构体,将每次的位置存起来,但是这个程序中用了一个更好的储存方法:我们知道最大的格数是16*16个,也就是256个,那么我们转换为二进制表示就是8位数,那么我们可以使用24位的二进制表示啊!然后我们再进行解压缩,所以这就是很神奇的地方! 普通B
阅读全文
摘要:题意:按x从小到大给出n个点,要求一条从最左走到最右再回到最左的路径最小值 要求走过每个点 Solution by Rujia,liu #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vec
阅读全文
摘要:k个数的公约数的含义是这k个数中均含有某个因数, 因此我们只需把所有数的因数求出来,发现有k个数均含有某个因数,那么这个数必然是这k个数的公约数 因此此题的思路就是求出每个数的因子,并存储每个因子出现的次数。最后搜索这个数组就行 题目还保证了单调性 #include<iostream> #inclu
阅读全文
摘要:求因子数一定的最小数(反素数) #include<iostream> #include<string> #include<cmath> #include<cstring> #include<vector> #include<map> #include<set> #include<algorithm>
阅读全文

浙公网安备 33010602011771号