摘要:
对于数论 首先要提的当然是素数了 先从素数开始 这里的题目大部分来自网上一大神的数学题的总结 自己挑了一部分拿来练习POJ 2689Prime Distance经典的区间素数筛选一般看题的时候重点会看下数据范围 这题明显告诉你了l u 差不超过100W 那就想到可以从这里入手 对于100W内的素数我们是可以很快筛出来的 21Y就不太可能了所以可以转换下 先把47000内的素数打表筛出来 然后再用这些素数去筛 l-u内的素数 筛法与筛小的类似 因为差不超过100W 所以是可以很快解决掉的注意一下 有1的情况吧 1 #include 2 #include 3 #include 4 #includ. 阅读全文
摘要:
一直不大喜欢写题解 尤其做的很纠结的题目 终于纠结完了 就想代码一贴完事。缺点一:理解不透彻;二:很容易忘;三:不利于以后回顾复习;四:写代码容易乱;以这个专题为开始吧 把一些题目总结一下 解释一下 同一类型的放在一块 。hdu1465不容易系列之一(错排公式)虽说大家知道 还是把这个小小说一下来自百度百科当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推.第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;第二步,放编号为k的元素,这时有两种情况:⑴把它放到位置 阅读全文
摘要:
A 直接线段树过的 两遍 貌似大多是标记过的。。注意long long 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define LL long long 9 #define N 100100 10 LL s[N>1; 25 build(l,m,w=r) 56 { 57 if(f) 58 { 59 s[w]+=(r-l+1); 60 l... 阅读全文
摘要:
A记得以前做过 当时好像没做对 就是找个子串 满足括号的匹配 []最多的开两个栈模拟 标记下就行 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define N 10001012 char s[N];13 char st[N];14 int sn[N][3];15 int main()16 {17 int i,k,top=0;18 cin>>s;19 k = strl... 阅读全文
摘要:
链接捣鼓了一下午。。按堆建树 写完交 返回TLE。。数据不大 感觉不会超了 无奈拿了数据来看什么奇葩数据会超 发现数据跟我输出不一样 看了好久才明白理解错题意了给出的字符串有两个标签 按前一个来建二叉搜索树 按后一个建堆 搜索树直接排序 然后依次插入右子树 若当前值比前一个的值大 就在与其父亲比较 总之放到合适位置。这样的树叫笛卡尔树 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 using na 阅读全文
摘要:
A 开个数组记录一下 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 using namespace std;11 #define LL long long12 #define INF 1e1013 #define N 30001014 LL sum[N];15 int a[N];16 int pa[N];17 mapf;18 int main()19 {20 int n,i,g=0,x;21 cin>>n;22 f... 阅读全文
摘要:
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1282感觉这题就比较有意思了 ,虽说是看了别人的代码,我依旧卡了好几天,原因1.我理解错题意了 原因2.网上题解没有一个把这题说明白的,也没有解释题意的。。。每条路径上的警察的最大值不超过K 而不是总和不超过K容易想到用二维spfa来更新 不过k太大了可以想一下floyd的原本思想 是dp[i][j] = dp[i][j]+dp[j][k],经过j做中转之后的最短路 也就是每两个结点 都会有N次更新这里把更新顺序做了一下改变 以c从小到大排序 阅读全文
摘要:
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1933矩形的dp一般挺类似 大的矩形都是由小的推出来的 对于一个长为i 宽为j 的 矩形 分别枚举把这n个给出的小矩形放入里面后 取一个最优值dp[i][j] = max(dp[i][j],dp[i-x][j]+dp[x][j-y],dp[i][j-y]+dp[i-x][y]) 交换小矩形的长宽 再取一次 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #i 阅读全文
摘要:
最近遇到二分图匹配的题目,发现不怎么会,重新把之前的题目看了看,做下总结吧。http://poj.org/problem?id=1469 纯纯的二分图的最大匹配 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 vectorpa[410];11 int vis[410],mat[410];12 int find(int u)13 {14 int i;15 for(i = 0 ; i >t;32 ... 阅读全文
摘要:
A: 题意:给你一个半径为n的圆 求最少阻塞多少个点 才能使所以圆内及圆上的点 都不与外边的点相连 相连是距离为1 只算整数点这题定住x,y依次递减 判断一下是否4-connect 这个意思就是 它上下左右有没有跟它相连的 圆是对称的 判断1/4圆就可以了像左边的部分图 令初始y为n 只需要判断它的左上有没有跟它连接的就可以了 如果左边有的 话 y就减一 因为说明(i+1,y)已经不在圆内了 ,这里枚举的是圆内的点有没有跟圆外的点相连接 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8. 阅读全文