07 2016 档案

摘要:题目: 键盘输入一个高精度的正整数n(<=240位), 去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。 编程对给定的n和s,寻找一种方案,使得剩下的数最小。 Simple Input 178543 4 Simple Output 13 思路: 每一步总是选择一个使剩下的数最小的数字删 阅读全文
posted @ 2016-07-11 19:41 FuTaimeng 阅读(256) 评论(1) 推荐(1)
摘要:来自:http://blog.csdn.net/leolin_/article/details/6642096 欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。 通式:φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)….. 阅读全文
posted @ 2016-07-11 19:01 FuTaimeng 阅读(291) 评论(0) 推荐(0)
摘要:来自:http://blog.csdn.net/duanxian0621/article/details/7408887 //最近 一直在做一个数论专题,后期有待整理,先将有关资料收藏下,在学习高斯消元的时候看了czyuan大牛的此文获益匪浅,czyuan的此份模板可以解决大 多高斯问题,当然并不是 阅读全文
posted @ 2016-07-11 09:55 FuTaimeng 阅读(237) 评论(0) 推荐(0)
摘要:Fibonacci数是组合数学中非常重要的一个数列,它的递推公式是: F(1)=F(2)=1 F(n)=F(n-1)+F(n-2) 当然,用这个公式来计算F(n)是非常慢的,当计算F(n)时需要从F(1)一直计算到F(n)。Fibonacci数列还满足一些其他的公式,如: F(a+b+1)=F(a+ 阅读全文
posted @ 2016-07-10 15:09 FuTaimeng 阅读(382) 评论(0) 推荐(0)
摘要:很不错的题,加深了我对exgcd的理解 (以前我认为做题就是搜索、dp...原来数学也很重要) 理解了几个小时,终于明白了。但我什么都不打算写。 看代码吧: 阅读全文
posted @ 2016-07-10 14:31 FuTaimeng 阅读(260) 评论(0) 推荐(0)
摘要:•扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) = d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。 •设 a>b。 •1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0; •2,ab<> 阅读全文
posted @ 2016-07-10 14:07 FuTaimeng 阅读(176) 评论(0) 推荐(0)
摘要:•快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。 代码: #include<iostream> using namespace std; long long pow(int a,int b){ long long ans=1; 阅读全文
posted @ 2016-07-10 09:38 FuTaimeng 阅读(129) 评论(0) 推荐(0)
摘要:最小生成树 每读入一个城市,把他与之前的所有城市做一次link() link的内容: 1.如果两个城市直接相连,合并他们的集合(并查集)2.如果两个城市可以搭桥,添加一条边来连接。如果不可以搭桥,什么也不做。 接着循环所有pa[],如果pa[i]==i,那么这是一个city。这样计算city数量 做 阅读全文
posted @ 2016-07-10 09:07 FuTaimeng 阅读(677) 评论(0) 推荐(1)
摘要:倍增算法可以在线求树上两个点的LCA,时间复杂度为nlogn 预处理:通过dfs遍历,记录每个节点到根节点的距离dist[u],深度d[u] init()求出树上每个节点u的2^i祖先p[u][i] 求最近公共祖先,根据两个节点的的深度,如不同,向上调整深度大的节点,使得两个节点在同一层上,如果正好 阅读全文
posted @ 2016-07-09 12:29 FuTaimeng 阅读(10496) 评论(1) 推荐(6)
摘要:dp方程很简单: f[i] = min{ f[i-j] } + stone[i] 但是数据10^9太大了,超时超空间,这样只能过30% 来自:http://blog.csdn.net/w19960702123/article/details/40478187 当我们看到10^9与100块石头,和s, 阅读全文
posted @ 2016-07-08 17:38 FuTaimeng 阅读(345) 评论(0) 推荐(0)
摘要:这道题目相当于是让我们把a,b对齐,即a中第i大的数与b中第i大的数下标相同一看到交换次数,很容易让人想到归并排序我的做法是这样的就样例而言:a:1 3 4 2b:1 7 2 4读进来之后先处理a,b 把a,b按大小离散成1..n离散之后a:1 3 4 2 b:1 4 2 3那么我们现在的问题就变成 阅读全文
posted @ 2016-07-08 12:13 FuTaimeng 阅读(152) 评论(0) 推荐(0)
摘要:定义:A是包含n个元素的有序序列{a1,a2 … an},若ai > aj 且 i < j ,则称 (ai , aj)是A的一个逆序对。求逆序对是指求出A中存在逆序对的数量。 这个算法是归并排序的演化,仅需加上一行,就可以求逆序对个数。 简单的概括是:在把两个子序列合并时(两个子序列已经有序),如果 阅读全文
posted @ 2016-07-08 12:12 FuTaimeng 阅读(745) 评论(1) 推荐(0)
摘要:首先,预处理三个数组。 pre[x]表示在此之前颜色为x的客栈有多少个。 f[x]表示在此之前的客栈中,某个点c,c的颜色为x,并且从c点到已经读入的点之间有费用小于p的客栈,这样的c点的个数 last[x]表示上一个颜色为x的客栈出现在哪 那么接下来的事情就很显然了。 首先读进去一个客栈,如果这个 阅读全文
posted @ 2016-07-08 09:59 FuTaimeng 阅读(240) 评论(0) 推荐(0)
摘要:题目大意是求一个最长的抖动的子序列 题解中有一个大神写下了这样的代码: a、b分别表示当前最长的末尾是上升的、下降的子序列的长度,根据每次当前节点x和上一个y的关系更新a、b 好聪明... 感觉我经常把题想难... 阅读全文
posted @ 2016-07-08 09:09 FuTaimeng 阅读(110) 评论(0) 推荐(0)
摘要:floyd+枚举 看点: 1.floyd同时用数组p记录转移节点k,这样知道线段的端点u v就可以得到整条线段 2.任意一点c到线段a b的距离=(d[a][c]+d[c][b]-d[a][b])/2 3.枚举直径st en的所有子线段a b: for(int a=en;a;a=p[st][a]) 阅读全文
posted @ 2016-07-06 16:57 FuTaimeng 阅读(180) 评论(0) 推荐(0)
摘要:#include #include #define Size 1000005 using namespace std; struct Node{ int l,r,mid; long long sum,tag; }tree[Size]; void build(int num,int l,int r){//建树 tree[num].l=l; tree[num].r... 阅读全文
posted @ 2016-07-05 08:51 FuTaimeng 阅读(138) 评论(0) 推荐(0)
摘要:6.6二分图 二分图是这样一个图: 有两顶点集且图中每条边的的两个顶点分别位于两个顶点集中,每个顶点集中没有边直接相连接。 无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。 判断二分图的常见方法是染色法: 开始对任意一未染色的顶点染色,之后判断其相邻的顶点中,若未染色 阅读全文
posted @ 2016-07-02 21:57 FuTaimeng 阅读(171) 评论(0) 推荐(0)