随笔分类 - ACM
摘要:省赛还有不到50天了,自己DP这块实在是弱,准备就拿着些天狂刷DP了。http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1346大意: 求两个字符串的最长公共子序列。思路:水题,不过需要注意的就是字符串里可能会出现空格,需要用gets,真是坑。。。。。 1 #include 2 #include 3 #define max(a, b) a>b?a:b 4 5 char s1[1010], s2[1010]; 6 int dp[
阅读全文
摘要:http://poj.org/problem?id=1001题意:给你一个浮点数,一个整数,求浮点数的整数次方。思路:大数解决,注意处理后面多余的零跟前面多余的零,以及Java科学计数法的问题。 1 import java.math.*; 2 import java.util.Scanner; 3 4 public class Main { 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 /*sss*/ 8 Big...
阅读全文
摘要:TOYS大意:给你一个箱子,有n个挡板分隔成n+1部分,给你m个玩具的坐标,问每一部分有几个玩具。思路:举对每个玩具,二分线段下标,判断玩具在线段左边还是右边,枚举后统计。 1 #include 2 #include 3 #include 4 #include 5 #include...
阅读全文
摘要:Area 大意:每次给你一个点的横纵坐标变化值,求有多少点在多边形上,有多少点在多边形内,和多边形的面积。思路:Pick定理。一个计算点阵中顶点在格点上的多边形面积公式:S=a+b÷2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #define LL long long12 #...
阅读全文
摘要:Flesch Reading Ease题目很水,就是看懂题就行。题意: 给出一篇规范的文章,求其 句子数、单词数 和 音节数把这3个值代入题目给出的公式,输出其结果,保留2位小数。 标记单词分隔符: 逗号(,) 和 空格( ) 句子分隔符:句号(.) 问号(?) 冒号(:) 分号(;) 感叹号(!) 音节处理要求: (1)当单词总长度3时,单词中每出现一个元音字母(a、e、i、o、u、y),音节数+1,但是连续的(>=2)元音字母只按1个音节计算,且当单词后缀为-es、-ed和-e时,后缀的元 音字母e不列为音节数计算。但是后缀-le例外,要计算音节数。思路:没什么好说的,模拟水...
阅读全文
摘要:Labeling Balls大意:n个重量分别为1-n的小球,给定一些小球间的重量关系。 在符合重量关系的前提下,先输出编号小的球。思路:也是一道很简单的拓扑排序,不过要倒着来,注意一下要判重边。 1 #include 2 #include 3 using namespace std; 4 5 int Map[210][210], indegree[210], Ans[210]; 6 int n, m, x, y; 7 int i, j; 8 9 void Topo()10 {11 for(i = n; i >= 1; i--)12 {13 for(j ...
阅读全文
摘要:Sorting It All Out大意:给你一些关系,输出拓扑序列,如果有环,讨论一下;如果有多种情况,讨论一下;如果那两种都不是,输出拓扑序列。思路:没什么好说的,就是一个求拓扑序列。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define LL long long 11 #define min(a,b) (a>b?b:a) 12 #define max(a,b) (a>b?a:b) 13 #...
阅读全文
摘要:Borg Maze大意:给你一个m*n的迷宫,可以上下左右的走,只能走空格或字母,求出将所有字母连通起来的最小耗费。思路:先用BFS求出S到所有A的距离,再用Prim求最小生成树,求出最小耗费。这个题坑的不在题,是数据太坑了,在空格处理上没弄好,贡献了好几个WA和CE,看Discuss才知道很坑,最后用G++过了的代码,C++还RE,实在不知道说什么好了 =。= 1 #include 2 #include 3 #include 4 #define INF 0xfffffff 5 using namespace std; 6 7 char str[55][55]; 8 i...
阅读全文
摘要:Highways大意:给你一个用邻接矩阵形式存储的有n个顶点的无向图,让你求它的最小生成树并求出在这个生成树里面最大的边的权值。思路:用Prim求,判断条件改一下就行。PS:dis数组初始化的时候用memset一直RE,希望有知道怎么回事的不吝赐教,谢了~ 1 #include 2 #include 3 #define INF 0x3f3f3f3f 4 5 int Map[510][510]; 6 int dis[510]; 7 int n, m; 8 9 int min(int a, int b)10 {11 return a > b ? b : a;12 }13 14 in...
阅读全文
摘要:Truck History大意:用一个7位的string代表一个编号,两个编号之间的距离代表这两个编号之间不同字母的个数。一个编号只能由另一个编号变化的来,变化的字母的数量就是这两个编号之间相应的距离,现在要找出一个变化方案,使得总代价最小,也就是距离之和最小。思路:将每个字符串当成一个节点,求出每个节点之间需要变化的次数为边的权值,用Prim建立最小生成树(稠密图)。 1 #include 2 #include 3 #define INF 0x3f3f3f3f 4 5 int Map[2010][2010]; 6 char s[2010][8]; 7 int dis[2010]; 8 ...
阅读全文
摘要:Agri-Net大意:新镇长竞选宣言就是将网络带到每一个农场,给出农场个数,两两之间建光缆的耗费,求所有都联通的最小耗费。思路:最小生成树,因为边比较稠密,用Prim做。PS;对于比较稠密的图,用Prim,对于比较稀疏的图,用Kruskal。Kruskal是找边的过程,稀疏的话会比较快。 1 #include 2 #include 3 #define INF 0x3f3f3f3f 4 5 int dis[110]; 6 int Map[110][110]; 7 int n; 8 int Ans; 9 10 int min(int a, int b)11 {12 return a ...
阅读全文
摘要:Currency Exchange大意:有多种货币,之间可以交换,但是需要手续费,也就是说既有汇率又有手续费。问经过交换之后能不能赚。思路:Bellman_Ford,因为要求最长路,所以松弛条件改一下就好了。Tips:3 2 1 20.0货币的数量 兑换点的数量 主人公拥有的货币量 主人公拥有货币的价值1 2 1.00 1.00 1.00 1.00//货币1与货币2交换时,1与2的汇率是1.00,1换2的手续费是1.00,2与1的汇率是1.00,2换1的手续费是1.00。2 3 1.10...
阅读全文
摘要:Arbitrage大意:给你m种货币,给你m种货币兑换规则,问通过这些规则最后能不能盈利。eg:1美元换0.5英镑,1英镑换10法郎,1法郎换0.21美元,这样1美元能换0.5*10*0.21=1.05美元,净赚0.05美元。思路:用Floyd找出每两种钱之间的最大兑换关系,遍历一遍,看有没有那种钱币最后能盈利,有就输出Yes,没有就是No。在处理钱币名称与编号之间的关系时,可以用map存(比较好用),当然也可以用字符串比较。 1 #include 2 #include 3 #include 4 #define INF 0x3f3f3f3f 5 using namespace std; ...
阅读全文
摘要:Stockbroker Grapevine大意:有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消息。若不存在这样一个人,则输出disjoint。思路:有向图(互相之间可能不等)中各顶点之间的最短路径问题。一个人收到消息后便开始向所有他能发送的人(因人以固定的不等时间(长度1~10))发送消息,当所有人都收到消息后的时间长短为评价标准。 1 #include 2 #define INF 0x3f3f3f3f 3 4 int n; 5 int Map[110][110]; ..
阅读全文
摘要:Frogger大意:给出两个青蛙的坐标和其他n-2个石头的坐标,任一两个坐标点间都是双向连通的。现在要求求出所有通路的最大距离,并把这些最大距离作比较,把最小的一个最大距离作为青蛙的最小跳远距离。思路:先求出两两之间的最短距离,再求出每个点开始的最长路,在这些最长路中求出那个最小的。、输出用printf怎么着都不过,直接用cout了。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #define INF 0x3f3f3f3f 9 using namespace st...
阅读全文
摘要:昂贵的聘礼大意:中文题思路:每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,则这两个节点之间有边,权值为金币数,求第一个节点到所有节点的最短路。因为有等级限制,所以枚举每个点作为最低等级,选取符合所有符合等级限制的点。PS:参考的别人的博客,理解的不是很透彻,有些地方没想明白,后面还是要复习一下。 1 #include 2 #include 3 #include 4 #define INF 0x7FFFFFFF 5 6 int N, M; 7 ///物品i在有t号替代品的情况下的优惠价Map[i][t],当t=0时说明i无替代品,此时为原价 8...
阅读全文
摘要:Wormholes大意:虫洞旅行,前面一部分(n组)是双向正权,后面一部分(w组)是单向负权,判断有没有负权环。思路:由于有负权边,就不能Dijkstra了,用Bellman_Ford。就是看图中有没有负权环,有的话可以无限次走这个环,使得时间一定能得到一个负值。所以有的存在负环话就是可以,没有的话就是不可以了。 1 #include 2 #include 3 #include 4 #define Max = 10001 5 6 struct node 7 { 8 int s, e, t; 9 } q[5010];10 11 int dis[520];12 13 bool Be...
阅读全文
摘要:Pots大意:给你两个碗,三种操作,看多少步能凑出给你的容量。思路:六入口的BFS,难点主要是在记录路径打印上,只要再开一个数组,记录一下前驱,最后按顺序打印即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int vis[110][110]; 9 int a, b, c; 10 11 struct node 12 { 13 int x, y, step; 14 } ; 15 16 struct Path 17 { 18 i...
阅读全文
摘要:Shuffle'm Up大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。现在输入s1和s2的初始状态 以及 预想的最终状态s12。问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"思路:就是个字符串模拟题。 1 #include 2 #include 3 4 void Solve() 5 { 6 int n, m; 7 char s1[110], s2[110], s3[210], s4[210], s[21
阅读全文
摘要:Prime Path大意:给你两个数,求从第一个数经过几次变换到第二个数。变换要求:1.中间数必须是素数 2.每次只能变一个数字。思路:对每一位数字进行bfs 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define LL long long 11 #define min(a,b) (a>b?b:a) 12 #define max(a,b) (a>b?a:b) 13 #define eps 1e-...
阅读全文

浙公网安备 33010602011771号