木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java5年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql5年进入店铺

随笔分类 -  ACM

摘要:这题的需要注意的地方就是计算行数与列数,以及输出的控制。题目要求每一列都要有能够容纳最长文件名的空间,两列之间要留两个空格,每一行不能超过60。简单计算下即可。输出时我用循环输出空格来解决对齐的,其实可以用一个很巧妙的方法,用printf("%-*s", k, file[i]),查过资料后发现*放到转换字符之间可以当作替代符,后面可以输入一个变量(如k)来控制,这句代码意思是输出左对齐(对应负号)的宽度为k(对应*)的字符串file[i]。代码:#include #include #include #include #include using namespace std; 阅读全文
posted @ 2013-07-24 00:30 程序流程图 阅读(272) 评论(0) 推荐(0) 编辑
摘要:给出一个序列,每次交换两个数,求有几种交换方法能使序列变成升序。n不大于5,用dfs做。代码:#include #include #include using namespace std; int num[8], ans, n; bool check() { //check if the array is inorder for (int i = 0; i num[i + 1]) return false; return true; } void dfs(void) { for (int i = 0; i num[i + 1]) { swap(num[i... 阅读全文
posted @ 2013-07-24 00:13 程序流程图 阅读(210) 评论(0) 推荐(0) 编辑
摘要:五个数三个运算符号,排列之后凑成结果为23,不考虑优先级。很水,数据量也不大,先生成五个数的全排列,用dfs找出结果能否为23即可。代码:#include #include using namespace std; #define RES 23 const int maxn = 5; int num[maxn]; bool flag; bool input(void) { for (int i = 0; i < maxn; i++) scanf("%d", &num[i]); if (num[0] || num[1] || num[2] || num[3] | 阅读全文
posted @ 2013-07-24 00:04 程序流程图 阅读(218) 评论(0) 推荐(0) 编辑
摘要:题目比较难理解。给出铁路的容量和站点数,以及几笔订单,要求算出如何盈利最大。咋一看想贪心,但无法确定是最优解啊。于是用dfs做,就两种状况,选与不选,先开一个每个站点的当前人数数组,假设要选,然后各个站点加上人数判断会不会超人数,不会就进入选择的下一轮dfs,然后把人数减掉,进入不选的dfs。这题据说用数组标记会超时。。。代码:#include const int maxn = 30; int cap, num, ord, ans; int cnt[10]; struct Order { int s; int e; int p; }; Order o[maxn]; bool ju... 阅读全文
posted @ 2013-07-23 12:22 程序流程图 阅读(158) 评论(0) 推荐(0) 编辑
摘要:题目:跟N皇后问题一样,不考虑对角冲突,但考虑墙的存在,只要中间有墙就不会冲突。N皇后一行只能放一个,而这题不行,所以用全图暴力放棋,回溯dfs即可,题目最多就到4*4,范围很小。刚开始考虑放一个棋子后就把其他不能放的地方标记下,然后再暴力,后来发现如果一个点重复标记在去标记时就会把点标成合法的,于是改用放棋子是进行检查,由于数据量小,也不会占用多少时间。之后才想到,在标记时可以用累加的,去标记时再一个一个减下来即可。。。代码:#include const int maxn = 5; char map[maxn][maxn]; int ans, n; bool isok(int x, i... 阅读全文
posted @ 2013-07-23 12:11 程序流程图 阅读(346) 评论(0) 推荐(0) 编辑
摘要:题目给出离散的点,要求求出一笔把所有点都连上的最短路径。最多才8个点,果断用暴力求。用next_permutation举出全排列,计算出路程,记录最短路径。这题也可以用dfs回溯暴力,但是用最小生成树要小心一点,最小生成树求的是最小连通图,而不是连成一条,不能用Kruscal,Prim算法修改一下也可以使用,改成选点时仅考虑头尾两点即可。代码:#include #include #include #include using namespace std; const int maxn = 10; int p[maxn], rec[maxn], n; double sum, x[ma... 阅读全文
posted @ 2013-07-23 11:59 程序流程图 阅读(195) 评论(0) 推荐(0) 编辑
摘要:题目给出一系列数字,然后问哪个数字是从小到大排在第几的,重复出现算第一个。数据范围为10000,不大,完全可以暴力,sort不会超时。但是由于以前做比赛时也遇到这种题目,没注意看数据范围,然后暴力被hack了。之后就学会了计数排序了。这题也用计数排序做,挺快的,代码也不长。代码:#include #include const int maxn = 10001; int num[maxn], s[maxn]; int main() { int n, q, tmp, m = 0, cnt = 0; while (scanf("%d%d", &n, &q) &am 阅读全文
posted @ 2013-07-23 11:48 程序流程图 阅读(214) 评论(0) 推荐(0) 编辑
摘要:题目要求写一个直接用比较排序的pascal程序,挺有趣的一题。我看题目数据范围就到8,本来以为贪个小便宜,用switch输出。然后发现比较次数是阶乘级别的,8的阶乘也是挺大的,恐怕会交不上去。于是改用回溯法。其实他比较时就是把后面的数一个一个向前比较,然后插到那位前面,继续回溯。else的处理比较麻烦而已,改了好久终于跟标准答案一样了。缩进没有处理,提交上去就ac了,看来oj没有检查缩进呢,如果有检查就还得处理一下了。代码:(未进行缩进处理)#include const int maxn = 10; int n, arr[maxn]; void insert_sort(int p, in... 阅读全文
posted @ 2013-07-23 11:31 程序流程图 阅读(315) 评论(0) 推荐(0) 编辑
摘要:题目给出一个后缀表达式,让你求从下往上的层次遍历。思路:结构体建树,然后用数组进行BFS进行层次遍历,最后把数组倒着输出就行了。uva过了,poj老是超时,郁闷。代码:#include #include #include const int maxn = 10001; char str[maxn]; int p; struct Node { char data; Node* l; Node* r; }; Node* build() { Node* u = (Node*) malloc (sizeof(Node*)); u -> data = str[p]; p--... 阅读全文
posted @ 2013-07-17 01:09 程序流程图 阅读(348) 评论(0) 推荐(0) 编辑
摘要:挺水的模拟题,刚开始题目看错了,poj竟然过了。。。无奈。uva果断wa了搞清题目意思后改了一下,过了uva。题目要求模拟木块移动:有n(0 #include #include using namespace std; typedef vector::iterator VI; vector v[30]; int rec[30]; int n; VI Find(vector &v, int num) { for (VI i = v.begin(); i != v.end(); i++) if (*i == num) { return i; } return v.be... 阅读全文
posted @ 2013-07-17 00:36 程序流程图 阅读(325) 评论(0) 推荐(0) 编辑
摘要:一、邻接表实现思路:一边遍历,一边倒置边,并添加到新的图中邻接表实现伪代码:for each u 属于 Vertex for v 属于 Adj[u] Adj1[v].insert(u);复杂度:O(V+E);输入:3 3 a b b c c a源代码:package C22; import java.util.Iterator; public class C1_3{ public static Adjacent_List getTransposeGraph(Adjacent_List g){ Adjacent_List Gt = new Adjacent_List(g.get... 阅读全文
posted @ 2013-07-16 01:03 程序流程图 阅读(360) 评论(0) 推荐(0) 编辑
摘要:由于没有括号,只有+,-,++,--,优先级简单,所以处理起来很简单。题目要求计算表达式的值以及涉及到的变量的值。我这题使用stl的string进行实现,随便进行练手,用string的erase删掉全部空格,然后对++、--进行处理然后删去,最后就只剩简单式子了,简单循环下就出来了。这里有几个坑点:1.erase函数删除字符后,后面字符的下标都会发生变化,刚开始使用i++去检查空格,结果删除后会跳掉字符。2.++、--的后缀处理要注意,我开了两个数组放后缀运算的。3.输出的变量值是当前后自增后的数。唉,我发现我每次写stl,代码都很乱哪,果然缺欠练习呢。代码:#include #includ. 阅读全文
posted @ 2013-07-16 00:43 程序流程图 阅读(168) 评论(0) 推荐(0) 编辑
摘要:题目很简单,给一个队列以及文件的位置,然后一个一个检查,如果第一个是优先级最高的就打印,否则放到队列后面,求所要打印的文件打印需要花费多长时间。这里我用数组模拟队列实现,考虑到最糟糕的情况,必须把数组开到maxn*maxn。另外当所要打印的文件优先级不是最高的时候也需要排列到后面。0.016s。代码:#include const int maxn = 101; int t, n, m, time; int q[maxn*maxn]; int print() { int front = 0, rear = n; while (1) { int max = q[front]; fo... 阅读全文
posted @ 2013-07-16 00:32 程序流程图 阅读(169) 评论(0) 推荐(0) 编辑
摘要:题目说每个相同文件(01串)都被撕裂成两部分,要求拼凑成原来的样子,如果有多种可能输出一种。我标题写着排列组合,其实不是什么高深的数学题,只要把最长的那几个和最短的那几个凑一起,然后去用其他几个验证就行了,反正我的验证是非常暴力的,看起来。。。(其实加了个二维数组判定不是很吃复杂度)代码:#include #include #include #include #include using namespace std; const int maxn = 150; string p[maxn]; int n, cnt, min, max; bool flag, used[maxn]; ... 阅读全文
posted @ 2013-07-14 00:48 程序流程图 阅读(202) 评论(0) 推荐(0) 编辑
摘要:中文意思不解释。很水,我本来想用switch处理字符串,然后编译不通过。。。原来switch只能处理整数型的啊,我都忘了。然后就有了很挫的一大串if代码了。。。代码:#include #include using namespace std; int digit(string str) { if (str == "zero") return 0; if (str == "one") return 1; if (str == "two") return 2; if (str == "three") return 3; 阅读全文
posted @ 2013-07-14 00:41 程序流程图 阅读(157) 评论(0) 推荐(0) 编辑

木其网络科技专业程序员代写http://www.xmsydw.com
程序员学历擅长经验网店链接
apenny硕士ASP.NET PHP 电子 通信设计 图像 编程 网络5年进入店铺
zheng_qianqian本科C语言 C++面向对象 Java5年进入店铺
guoguanl本科Java Web项目 JSP Hibernate Struts Mysql5年进入店铺
点击右上角即可分享
微信分享提示