hdu 1113 Word Amalgamation 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1113
题意:输入一个字典,然后再输入若干单词(每行中,1 <= 单词数 <= 100,并且每个单词在字典中保证是唯一的),用XXXXXX结尾来表示字典的结束。接着输入一个单词word(1 <= 字母个数 <= 6),每个单词你都需要在字典中找出所有可以用word的字母重排后得到的单词,并按照字典序从小到大的顺序在一行中输出;如果不存在,则输出“NOT A VALID WORD”。注意:字典中的单词不一定要按字典序顺序排列,但可以用word的字母重排后得到的单词必须要按字典序排列。
这里参考了《算法竞赛入门经典》中的例题:字母重排 来做的,自以为看懂后能快速地写出来,但是发现好几个bug。这就是实践的重要性啊,不过还是很欣喜地通过这题学会了qsort函数(要包含头文件stdlib.h)的用法(
http://baike.baidu.com/view/982231.htm)还有关于int cmp_string(const void *a,const void *b) 的理解(
http://hi.baidu.com/lyb1900/item/4698682bd85389fa51fd875c)
三个qsort处理后的结果如下(以样例数据为例):
样例数据:
tarp given score refund only trap work earn course pepper part
第一个: qsort(dic, n, sizeof(dic[0]), cmp_string);
course earn given only part pepper refund score tarp trap work
第二个: qsort(sorted[i], strlen(sorted[i]), sizeof(char), cmp_char);
ceorsu aenr eginv lnoy aprt eepppr defnru ceors aprt aprt korw
第三个: qsort(word, strlen(word), sizeof(char), cmp_char);
就是把输入的单词按字典序排序,比如输入nfudre,它就会变成defnru,然后比对回dic相应的位置,就能查出是refund这个单词了。
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std; char dic[][];
char sorted[][];
char word[]; // 字符比较函数
int cmp_char(const void *_a, const void *_b)
{
char *a = (char *)_a;
char *b = (char *)_b;
return *a - *b;
} // 字符串比较函数
int cmp_string(const void *_a, const void *_b)
{
char *a = (char *)_a;
char *b = (char *)_b;
return strcmp(a, b);
} int main()
{
int i, n = ;
while ()
{
scanf("%s", dic[n]);
if (dic[n][] == 'X') // 遇到结束标志就终止循环
break;
n++;
}
qsort(dic, n, sizeof(dic[]), cmp_string); // 给字典中所有单词排序(单词与单词之间)
/*
for (i = 0; i < n; i++)
{
cout << dic[i] << "\t";
}
cout << endl;
*/
for (i = ; i < n; i++)
{
// cout << dic[i] << '\t';
strcpy(sorted[i], dic[i]); // 字符串复制,注意不能直接用dic进行每个单词排序,否则会找不到字典中原有的单词
qsort(sorted[i], strlen(sorted[i]), sizeof(char), cmp_char); // 给每个单词排序(单词内部)
// cout << sorted[i] << endl;
}
while (scanf("%s", word))
{
int flag = ;
if (word[] == 'X')
break;
qsort(word, strlen(word), sizeof(char), cmp_char); // 给输入单词排序
// cout << word << endl;
for (i = ; i < n; i++)
{
if (strcmp(sorted[i], word) == )
{
printf("%s\n", dic[i]); // 输出原始单词,而不是排序后的
flag = ;
}
}
if (!flag)
printf("NOT A VALID WORD\n");
printf("******\n");
}
return ;
}
hdu 1113 Word Amalgamation 解题报告的更多相关文章
- hdu 1113 Word Amalgamation
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1113 字符串简单题: stl水过 如下: #include<algorithm> #inc ...
- hdu - 1113 Word Amalgamation (stl)
http://acm.hdu.edu.cn/showproblem.php?pid=1113 给定一个字典,然后每次输入一个字符串问字典中是否有单词与给定的字符串的所有字母一样(顺序可以打乱),按字典 ...
- HDU 1113 Word Amalgamation (map 容器 + string容器)
http://acm.hdu.edu.cn/showproblem.php?pid=1113 Problem Description In millions of newspapers across ...
- HDOJ/HDU 1113 Word Amalgamation(字典顺序~Map)
Problem Description In millions of newspapers across the United States there is a word game called J ...
- HDU 4303 Hourai Jeweled 解题报告
HDU 4303 Hourai Jeweled 解题报告 评测地址: http://acm.hdu.edu.cn/showproblem.php?pid=4303 评测地址: https://xoj. ...
- 【九度OJ】题目1113:二叉树 解题报告
[九度OJ]题目1113:二叉树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3-- ...
- HDOJ.1113 Word Amalgamation(map)
Word Amalgamation 点我挑战题目 点我一起学习STL-MAP 题意分析 给出字典.之后给出一系列======乱序======单词,要求你查字典,如过这个乱序单词对用有多个有序单词可以输 ...
- hdu 2544 最短路 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目意思:给出 n 个路口和 m 条路,每一条路需要 c 分钟走过.问从路口 1 到路口 n 需 ...
- 【LeetCode】408. Valid Word Abbreviation 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 日期 题目地址:https://leetcod ...
随机推荐
- mac os x常用快捷键及用法
最近在研究mac os x系统,开始入手,很不习惯,和windows差别很大,毕竟unix内核.使用中总结了一些使用快捷键(默认),持续更新,欢迎大家补充.1.撤销:command+z 保存:comm ...
- BZOJ-1880 Elaxia的路线 SPFA+枚举
1880: [Sdoi2009]Elaxia的路线 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 921 Solved: 354 [Submit][Sta ...
- BZOJ-2756 奇怪的游戏 黑白染色+最大流+当前弧优化+二分判断+分类讨论
这个题的数据,太卡了,TLE了两晚上,各种调试优化,各种蛋疼. 2756: [SCOI2012]奇怪的游戏 Time Limit: 40 Sec Memory Limit: 128 MB Submit ...
- 【poj2187】 Beauty Contest
http://poj.org/problem?id=2187 (题目链接) 题意 求点集上两点间最长距离 Solution 凸包+旋转卡壳. 旋转卡壳是看起来很难,但是很好意会也很好实现的算法,但是要 ...
- IOS基础之 (十五)知识点
一 SEL 1. 方法的存储位置 每个类的方法地址列表都存储在类对象中. 每个方法都有一个与之对应的SEL类型的对象. 根据一个SEL对象就可以找到方法的地址,进而调用方法. Person.h #im ...
- WPF获取鼠标当前位置
/// <summary> /// 设置鼠标的坐标 /// </summary> /// <param name="x">横坐标</par ...
- System.gc()与Object.finalize()的区别
finalize()是由JVM自动调用的,你可以用System.gc(),但JVM不一定会立刻执行,JVM感觉内存空间有限时,才会开始执行finalize(),至于新的对象创建个数和被收集个数不同是因 ...
- SqlDataReader执行带输出参数存储过程 错误分析
在上一篇随笔:SqlDataReader读取分页数据,pageCount你是肿么了? 遇到了很让人头疼的问题:SqlDataReader执行带输出参数的存储过程总是获取不到输出参数的正确值.这里将解决 ...
- 关于Base64编码
作者:唐风 Base 64是一种比较古老的编码方式,在通信中非常常见.它实现很简单. What? "Base64是一种基于64个可打印字符来表示二进制数据的表示方法(来自维基)". ...
- centos linux从无到有安装wordpress
序:本博客从无到有搭建wordpress,包括从服务器和域名购买,会将步骤一步一步记录下来.如果你也是新手,那你有福了,因为我的系统是centos,对号入座啊. 目录 一.准备域名和服务器一.安装ph ...