ZOJ-3056
来源:互联网 发布:网盘存储源码 编辑:程序博客网 时间:2024/06/17 04:32
这题周末的时候用JAVA写狂RE,吐血了。。调了一个上午都没调出来,当时放弃了,今天想了想还是用C重写吧,谁叫我C++不熟呢,其实用C++的string和map几下就搞定了,C的话只能硬模拟。。这里我用了struct数组排序后二分查找来模拟map,真是蛋疼无比啊。。不过还好C的操作现在比较熟练了,一气呵成没出指针错误,这是万幸,一次AC了,时间竟然比那些C++代码都少。。注意句子处理到最后的时候其实还应该判断下末尾是不是还有单词没打印,如果有的话要打印,但是我把那段代码去掉了还能AC,我就把它删掉了。。毕竟代码越短越好啊,哈哈
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>struct Pair{char key[20];char value[20];};static int cmp_char(const void *p1, const void *p2){return *(char *) p1 - *(char *) p2;}static int cmp(const void *p1, const void *p2){struct Pair *pp1 = (struct Pair*) p1;struct Pair *pp2 = (struct Pair*) p2;return strcmp(pp1->key, pp2->key);}int main(){struct Pair *array = malloc(10000 * sizeof(struct Pair));struct Pair *temp = malloc(sizeof(struct Pair));char s[81];int index = 0, len;while (scanf("%s", s), strcmp(s, "DICTIONARY_DEFINE_OVER")){strcpy(array[index].key, s);strcpy(array[index].value, s);len = strlen(s);char *key = array[index].key;if (len > 2)qsort(key + 1, len - 2, sizeof(char), cmp_char);index++;}getchar();qsort(array, index, sizeof(struct Pair), cmp);int i, si = 0, word = 0;char *key = temp->key;while (gets(s) != NULL){for (i = 0; s[i] != '\0'; i++){if (islower(s[i])){word = 1;key[si++] = s[i];}else{if (word){key[si] = '\0';len = strlen(key);if (len > 2)qsort(&key[1], len - 2, sizeof(char), cmp_char);struct Pair *find = bsearch(temp, array, index,sizeof(struct Pair), cmp);printf("%s", find->value);si = 0;}word = 0;putchar(s[i]);}}putchar('\n');}free(temp);free(array);return 0;}
0 0
- ZOJ-3056
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- 年薪50万美金的工程师到底牛在哪里?
- 安卓使用GridView点击背景为黄色,自定义Gridview背景色
- ThinkPHP框架设计与扩展总结
- 从hiredis使用出core谈谈redis多线程的使用
- 插入排序
- ZOJ-3056
- Iterator(迭代器)的一般用法
- java基础加强_代理
- FZU 2128 最长子串
- 为什么已经引用了using System.Management 使用ManagementObjectSearcher时为什么提示未引用空间?
- Scripts:此脚本慎用lob_fragmentation_user.sql
- Android中如何获取设备的宽高
- [ALGO-50] 数组查找及替换
- Permutations II