上一页 1 ··· 31 32 33 34 35 36 37 38 39 ··· 66 下一页
摘要: 要求输出每个单词在不产生歧义的情况下的最短前缀,直接构造出一颗字典树就可以了。先执行插入操作,对每一个单词经过的路径都进行一个自增的操作。再一次搜索每一个单词,当其遇到覆盖次数为一,或者是到了单词末尾就输出。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int N, idx;char s[1005][25], rec[25];struct Node{ int cnt, ch[26];}e[30000 阅读全文
posted @ 2012-08-01 09:16 沐阳 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 这题用匈牙利算法是无论如何也过不了的,边太多了。利用简单的贪心规则,我们每次选取最优的匹配方案来进行匹配,在划分上我们采用工资要求为负值的去寻找工资要求为正值的人。对于一个要求工资比他低的男人来说,其实就是优先最有钱的男人,因为能与之匹配的女生是最多的,在选取女生的时候,就选择满足要求下工资最高的女生,因为这种女生最难满足要求,这一对配对对后面的匹配来说是最优的。女生同理。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#define MA 阅读全文
posted @ 2012-08-01 09:13 沐阳 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 该题就是简单的二维树状数组,保留一份棋盘的最新状态即可,树状数组里面就只保留在原有基础上增加或者减少的某一种饺子的数量。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;char op[5];char G[1050][1050];int cc[1050][1050];// 数组中存储韭菜饺的数量,白菜饺的数量通过总数量减去韭菜饺来求void init(){ int k = 0; // 定义韭菜为1,白菜为0 for (int i = 1; i <= 阅读全文
posted @ 2012-08-01 09:08 沐阳 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 由于只有最多16种组合情况,所以就直接暴力枚举求解。这里题目有个要求就是按照字典序相对较小的输出规则输出,那么我们可以想到在兴趣数相同的情况下要不要去更新最优值,这就牵涉到我们刚开始的时候求解出来的解是否一定是字典序最小的,或则最后求解出来的解就是字典序最小的,我是采用压缩后的二进制数的最高位代表最小的兴趣,所以从最高位通过自减操作能够保证每次得到的该兴趣数的第一个解都是字典序最小的。#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>using nam 阅读全文
posted @ 2012-08-01 09:02 沐阳 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 一个网格中的图形,如果其面积只取方格的整数倍的时候,那么我们有如下公式。设面积为Area,多边形内部的整点个数为OnEdge,多边形轮廓线上的整点个数为InSide,那么有公式 Area = OnEdge / 2 + InSide - 1代码如下:#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;int main(){ int T, N; long long int ret, S; scanf("%d", &T); while (T-- 阅读全文
posted @ 2012-08-01 09:00 沐阳 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 首先申明此方法POJ超时,HDU压线过,优化版见http://www.cnblogs.com/Lyush/archive/2012/07/28/2613516.html线段树的写法与上面链接中的离散化版本的想法是相近的,只不过这里仅仅是通过线段树来保留某一x区域的多个矩形的面积并。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <map>#include <algorithm>using namespace std;int N, M, Q, cnt; 阅读全文
posted @ 2012-07-30 11:29 沐阳 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 这题首先要将等式两边除以k,这样在求两边的互质数的个数就是最后的结果了。我们采用的策略就是用小区间的每一个数去匹配大区间的数。但是如果每次都去分解一个数的质因子的话,那么会TLE,因此先预处理出1-100000每个数的质因子再进行计算。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;int a, b, c, d, k, rec[300000], idx;in 阅读全文
posted @ 2012-07-29 11:09 沐阳 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 将与N不互质的数全部找出来,再应用容斥定理求得最后的结果。这题在求 a/b MOD c 的时候使用费马小定理等价于 a*b^c(-2) MOD c.用x/lnx 可以估计出大概有多少素数。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#define MOD 1000000007LLusing namespace std;typedef long long int Int64;typedef lo 阅读全文
posted @ 2012-07-28 23:55 沐阳 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 这题简单说就是求矩形的面积并,线段树?只有20个矩形,我们可以用容斥来做。但是这个有个比较麻烦的地方就是要求出任意组合情况下的面积并,试过几次每次进行求解的写法都一一超时了。这里选择在dfs的时候直接枚举题目将询问的状态,只要当前状态是其子集的话,就直接加到上面。最后M次询问就能够在O(1)的时间内完成了。296MS水过了。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#define INF 10000using namespace st 阅读全文
posted @ 2012-07-28 20:26 沐阳 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 红果果的容斥定理。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int ans, seq[15], N, flag;int M;inline int GCD(int a, int b){ int t; while (b) { t = a; a = b; b = t % b; } return a;}inline int LCM(int a, int b) { return a... 阅读全文
posted @ 2012-07-28 10:08 沐阳 阅读(196) 评论(0) 推荐(0) 编辑
上一页 1 ··· 31 32 33 34 35 36 37 38 39 ··· 66 下一页