摘要:
http://acm.sdut.edu.cn/web/problem.php?action=showproblem&problemid=2222不算一个难题,就是刚一开始读题的时候感觉,题目真的好绕啊。题目的意思就是给你 一串字符串,三个一组(空格也算一个字符)的分开,按照它给的标准把这些字符串变成六位数一组的串,如果某个字符串最后不足三个,那么就用空格填充。然后呢,题目的输入是任意给你四个数字,让你用刚刚得到的那几个六位数依次对这四个数取余,会得到四个余数,然后把这四个余数连接起来,会得到一个新的字符串,(记住,如果不是第一个余数,并且余数小于10那么就加前导零把它扩充为2位数)然后 阅读全文
摘要:
http://poj.org/problem?id=3274感觉这都题目好无语,很早就开始看题目,可是看不懂就放下了,后来又看,还是没看懂又放下了。这样来来回回的以至于昨天做,还是看的discuss里面的才知道了怎么回事。这个就是给你n头牛和k个种类,然后会给你n个数字,这n个数字当你把他们转化为2进制数时,他们的数码个数不会超过给的种类个数,比如说样例给的种类 3 ,然后n个数里最大的那个是7,2进制数为111.然后让你找的就是连续的第i头和第j头中,满足这些牛的k种特征个数是一样的这个也许看了还是不大明白,看看下面的转化方式吧111 111 000110 22... 阅读全文
摘要:
http://poj.org/problem?id=3349题目的意思就是给你一堆雪人的胳膊长,每个雪人都有六个胳膊,他们给出的顺序是按顺时针,或是逆时针给出的,但是六个里以哪个开头是不确定的。如果里面有任何两个相同,则就输出 “Twin snowflakes found.” 否则输出“No two snowflakes are alike.”。一开始我还以为是让找有多少个snowflakes,我想数据那么大,再怎么弄,也是TLE啊。原来是弄错题意了。悲剧。题意弄懂了,可是还是TLE,去看别人的解题报告,真厉害,这也能想到,而且代码一点不复杂,不过感觉还是很慢,3000多MS呢,呵呵,不过思路 阅读全文
摘要:
http://poj.org/problem?id=3020题目就是一个最小路径覆盖的问题,因为这是一个无向图,所以,最小路径覆盖数 = "*"的总数 - 最大匹配数/2; 如果是一个有向图,则最小路径覆盖数 = "*" 的总数 - 最大匹配数。最大匹配用匈牙利算法就可以了,然后就是建图,因为题目中说了,可以上下左右的覆盖(只要是连着的),所以建图的时候,如果遇到一个 "*" 还要判断一下它的四周是不是也是 "*"; 1 #include<stdio.h> 2 #include<string.h& 阅读全文
摘要:
利用快速排序,在进行完一次快排之后,让k和分成的两个子数组比较,比如说a[p……r] 被分成了 a[p……q]和 a[q+1……r] 让这个K和左边的子数组中元素的个数比较,如果大于,则递归左区间如果小于,则递归右区间。这样,在期望意义下,程序的时间复制度为O(n) 1 #include<stdio.h> 2 #include<iostream> 3 #include<string.h> 4 using namespace std; 5 #define N 10000 6 int a[N]; 7 void sortt(int l,int r,int k) 8 阅读全文
摘要:
http://acm.sdut.edu.cn/web/problem.php?action=showproblem&problemid=2376题目的意思就是给你一串字符串,其中,大写字母代表的是运算符,小写字母代表的是操作数,然后自定义一种运算形式为。给的这串字符用栈来进行运算,最后会得到一个新的序列,题目让你找的是一种序列,这种序列用同样的运算形式,经过队列的运算后得到的新序列与栈运算得到的序列相同。其实思路就是很简单,对给定的序列按二叉树的后序遍历形式建树,然后从左向右,从下到上进行层序遍历便可得到结果。建立二叉树不难,难的是当时做的时候没有想到层序遍历是可以bfs实现的,还是f 阅读全文
摘要:
题目我感觉就是一个模拟题。就是给你说TinyBasic语言的语法规则,然后让你对这个TinyBasic语言程序就进行解释。只要认真一点,就能过掉了。要注意的就是,TinyBasic语言中表达式的定义有三个,后面只要是提到有表达式的地方,这三个定义都要考虑。一开始就是以为那个IF 那里只会有 判断式 ,忘了其他的两种情况了 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 #defi 阅读全文
摘要:
http://poj.org/problem?id=2002用二维hash数组对输入的点进行标记。对原数组进行排序,然后从前到后任选俩个点,作为一个正方形的边,然后再根据关系求出另外两个点,在hash数组里看是否进行了标记,如果有,这找到了一个正方形。 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<stdlib.h> 5 #include<algorithm> 6 using namespace std; 7 #define N 201 阅读全文
摘要:
http://poj.org/problem?id=1274这道题目与1469是一样的,我感觉连输出形式都差不多。只不过这里是牛与什么的匹配,同样,把他们分别用两个集合来保存,然后用匈牙利算法来求得最大匹配数 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 #define N 210 6 int map[N][N],m[N],v[N]; 7 int n,mm; 8 int dfs(int x) 9 {10 int i;11 for(i 阅读全文
摘要:
http://poj.org/problem?id=3041这个题目真的一点变形都没有,直接套一个匈牙利算法求最大匹配数。把所给的点,分成两个集合,然后用一个模板就可以了 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 #define N 510 6 int map[N][N],v[N],m[N]; 7 int n,g; 8 bool dfs(int x) 9 {10 int i;11 for(i=1;i<=n;i++)12 { 阅读全文