摘要: 目前只找到一部分uva上的题目,其它的应该是没有了,或者我还没找到...注:带有“类似”标记的题目表明为类似的题目,可能与例题有些出入,但不是很大,用的是同样的方法。第五章:5.1.1 WERTYUUVa10082 - WERTYU5.1.2 TEX括号UVa272 - TEX Quotes5.1.3 周期串UVa455 - Periodic Strings5.2.1 小学生算术UVa10035 - Primary Arithmetic5.2.2 阶乘的精确值UVa623 - 500!5.3.1 6174问题5.3.2 字母重排UVa642 - Word Amalgamation5... 阅读全文
posted @ 2013-04-18 13:20 xiaobaibuhei 阅读(348) 评论(0) 推荐(0)
摘要: 《算法竞赛入门经典》6.3.1下球下落对应题目,光这样看着总觉得缺点什么,还是写一下吧,还能有点成就感,哪怕只是照抄代码,能加深一点理解也是好的。 View Code 1 #include <cstdio> 2 3 int main() 4 { 5 #ifdef LOCAL 6 freopen("in", "r", stdin); 7 #endif 8 int n, d, i; 9 scanf("%d", &n);10 while(n--)11 {12 scanf("%d%d", &d, 阅读全文
posted @ 2013-04-17 17:04 xiaobaibuhei 阅读(497) 评论(0) 推荐(0)
摘要: 循环队列,本来要用链表模拟,可是因为是同时删除两个节点,而在模拟时后删除的节点可能会影响先删除的节点(删除第一个节点后指针指向下一个节点,而该节点如果是要删除的第二个节点的话指针还要移动),感觉有点麻烦,就用数据模拟了,反正数据也不大。 代码如下:View Code 1 #include <cstdio> 2 using namespace std; 3 4 const int maxn = 25; 5 int a[maxn]; 6 int size; 7 8 int main() 9 {10 #ifdef LOCAL11 freopen("in", " 阅读全文
posted @ 2013-04-17 15:24 xiaobaibuhei 阅读(483) 评论(0) 推荐(0)
摘要: 用栈进行模拟,读取字符串,然后逐个字符进行判断,是‘(’就忽略, 是大写字母的话入栈,是‘)’的话就弹出两个矩阵判断计算。 代码如下:Code 1 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 struct Matrix 8 { 9 int row, col;10 };11 12 stack st;13 14 int main()15 {16 #ifdef LOCAL17 freopen("in", "r", stdin);18 #endif19 int n. 阅读全文
posted @ 2013-04-17 14:20 xiaobaibuhei 阅读(239) 评论(0) 推荐(0)
摘要: 一道简单的比较查找题,刚开始数组开得不够大,RE。 代码如下:View Code 1 #include 2 #include 3 using namespace std; 4 5 const int maxn = 1000000; 6 char s[maxn], t[maxn]; 7 int main() 8 { 9 #ifdef LOCAL10 freopen("in", "r", stdin);11 #endif12 int slen, tlen;13 while(scanf("%s%s", s, t) != EOF)14 {15 阅读全文
posted @ 2013-04-15 17:20 xiaobaibuhei 阅读(150) 评论(0) 推荐(0)
摘要: 用栈进行模拟就行了,不过要考虑空行的情况,该开始就没考虑数据有空行的情况,认为不可能,WA了一次,果然没什么理所当然啊。 代码如下:View Code 1 #include <cstdio> 2 #include <stack> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 150; 7 8 int main() 9 {10 #ifdef LOCAL11 freopen("in", "r", stdin);12 #endif13 int 阅读全文
posted @ 2013-04-15 14:53 xiaobaibuhei 阅读(234) 评论(0) 推荐(0)
摘要: 如果先横着切再竖着切,所需次数为(m-1)+(n-1)*m = mn-1; 如果先竖着切再横着切,所需次数为(n-1)+(m-1)*n = mn -1;所以结果为mn-1。代码如下:View Code 1 #include <cstdio>2 3 int main()4 {5 int m, n;6 while(scanf("%d%d", &m, &n) != EOF)7 printf("%d\n", m*n-1);8 return 0;9 } 上面代码耗时0.048s,下面的代码先计算结果保存到数组中,然后直接访问,耗时0.0 阅读全文
posted @ 2013-04-11 17:30 xiaobaibuhei 阅读(162) 评论(0) 推荐(0)
摘要: 中途相遇法,新学的东西,大概意思是把数据分为两部分,先考虑第一部分,把结果保存到一个映射里,再考虑第二部分,得出结果后再在第一部分的映射里查找并进行计算。不过不明白为什么时间复杂度是O(1.44nlogn)。照搬书上的代码如下:View Code 1 #include <cstdio> 2 #include <map> 3 using namespace std; 4 5 int const maxn = 24; 6 map<int, int> table; 7 8 int bitcount(int x) 9 {10 return x == 0 ? 0 : 阅读全文
posted @ 2013-04-11 15:34 xiaobaibuhei 阅读(169) 评论(0) 推荐(0)
摘要: map是c++的一个标准容器,它提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1.map最基本的构造函数;map<string , int >mapstring;map<int ,string >mapint;map<sring, char>mapstring;map< char ,string>mapchar;map<char ,int>mapchar;map<int ,char >mapint;2.map添加数据;map<int ,string> 阅读全文
posted @ 2013-04-11 14:04 xiaobaibuhei 阅读(227) 评论(0) 推荐(0)
摘要: 题目大意:给一个n个数的数组A[1...n],从中找出两个数A[i], A[j](i 2 #include 3 #include 4 using namespace std; 5 6 int main() 7 { 8 #ifdef LOCAL 9 freopen("in", "r", stdin);10 #endif11 int T, x;12 scanf("%d", &T);13 while(T--)14 {15 int n;16 scanf("%d", &n);17 scanf("%d 阅读全文
posted @ 2013-04-10 16:19 xiaobaibuhei 阅读(166) 评论(0) 推荐(0)