摘要: 《算法竞赛入门经典》5.3.2的题目,题目大意:输入一个字典,然后再输入若干单词。每输入一个单词w,你都需要在字典中找出所有可以用w的字母重排后得到的单词,并按照字典序从小到大的顺序输出。代码如下:View Code 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 char dict[110][8], sorted_dict[110][8]; 6 7 int cmp_char(const void * _a, const void * _b) 8 { 9 char * 阅读全文
posted @ 2013-05-03 17:59 xiaobaibuhei 阅读(199) 评论(0) 推荐(0)
摘要: 《算法竞赛入门经典》5.4.1的题目,大意是,给出一个数表,如下: 第一项是1/1, 第二项是1/2, 第三项是2/1, 第四项是3/1, 第五项是2/2.....给一个正整数n,求第n项。 设第n个数在第k斜行,则有(k-1)*k/2 + 1 <= n <= k*(k+1) ==> (k-1)2<= k2 - k + 2 <= 2*n <= k2 + k < (k+1)2 ==> k-1 <= sqrt(2*n) < k+1, 因为要k的下界,可以令k = (int)(sqrt(2*n)-1), 从这个值递增枚举。代码如下:View 阅读全文
posted @ 2013-05-03 16:51 xiaobaibuhei 阅读(363) 评论(0) 推荐(0)
摘要: 《算法竞赛入门经典》6.1.2的题目,大意是给一个从1到n的递增序列A和一个1到n的排列B,让你判断能否通过栈操作(压入和弹出)把A转化成B。代码如下:View Code 1 #include <cstdio> 2 #include <stack> 3 using namespace std; 4 5 const int maxn = 1000+10; 6 stack<int> s; 7 8 int main() 9 { 10 #ifdef LOCAL 11 freopen("in", "r", stdin);12 # 阅读全文
posted @ 2013-05-03 15:45 xiaobaibuhei 阅读(687) 评论(0) 推荐(0)
摘要: 《算法竞赛入门经典》6.1的题目。题目大意:给n张牌,放成一叠,从上到下编号从1到n,当至少还有两张牌时,丢弃最上面的牌,然后把新的最上面的牌放到最下面,一直重复,直到只剩下一张牌,输出丢弃牌的序列。 用队列进行模拟,不过第一次提交的时候PE了,格式说明一下:”Discarded cards:“,然后每一数字前加一个空格,第一个数字之后的数字要在空格前加逗号。代码如下:View Code 1 #include <cstdio> 2 #include <cstdio> 3 #include <queue> 4 using namespace std; 5 6 阅读全文
posted @ 2013-05-03 15:13 xiaobaibuhei 阅读(474) 评论(0) 推荐(0)