博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 10391 - Compound Words
阅读量:4953 次
发布时间:2019-06-12

本文共 1625 字,大约阅读时间需要 5 分钟。

题意

按字典序输入一些单词, 查找单词是否是由两个单词复合而成的并将复合单词输出

例如 ab + normal = abnormal

思路

vector< string> 存下string

题给数据范围120,000单词, 全部暴力枚举一遍复杂度肯定高了
考虑到因为输入是按字典序的
那么可以记录下每个字母开头的下标范围
( 这里用到两个标记数组 m[30], n [30] )
WA了几次, 最后发现是因为查找输出顺序有误
最后用map标记了一下 , 统一输出就AC了


AC之后学习网上题解的大多数方法用的是hash函数

还有 .substr() 枚举拆分字符串, 复杂度也在可控范围内

记录

C++ primer上关于string搜索函数 .find()

这里搜索返回值的数据类型是 size_type 即 size_t

//在str当中查找第一个出现的str2,找到则返回出现的位置,否则返回结尾    string str ("I am an acmer!");    string str2 ("acmer");    size_t found = str.find(str2);    if (found!=std::string::npos)        cout << "Find " << str2 << " at : " << found << endl;

AC代码

#include 
#include
#include
#include
#include
#include
#include
using namespace std;vector
vec;map
mrk;int m[30],n[30];int main(){ int num = 0, i = 0, j; string s; std::size_t f; memset(n,0,sizeof(n)); while( cin >> s ){ vec.push_back(s); num++; if( m[s[0]-'a'] == 0 ) m[s[0]-'a'] = num; n[s[0]-'a']++; } for( i = 0; i < num; i++ ){ int len = vec[i].length(); int x = vec[i][0]-'a'; //cout <<"first" << i << ' ' << m[x]+n[x]-1-1 << ' ' << endl; for( j = i; j < m[x]+n[x]-1; j++ ){ f = vec[j].find(vec[i]); if(f != std::string::npos){ int xx = vec[j][len] - 'a'; if( m[xx] == 0 ) continue; //cout << "second" << m[xx]-1 << ' ' << m[xx]+n[xx]-1-1 << endl; for( int k = m[xx]-1; k < m[xx]+n[xx]-1; k++ ) if( vec[i] + vec[k] == vec[j] && !mrk.count(j)){ pair
p(j,1); mrk.insert(p); break; } } } } for( i = 0; i < num; i++ ) if( mrk.count(i) ) cout << vec[i] << endl; return 0;}

转载于:https://www.cnblogs.com/JinxiSui/p/9740633.html

你可能感兴趣的文章
网页消息类
查看>>
【BZOJ】2959: 长跑(lct+缩点)(暂时弃坑)
查看>>
日常一些出现bug的问题
查看>>
同时启动多个tomcat服务器
查看>>
怎么将iphone上的照片导出到本地文件
查看>>
Repeater+DataPagerSource分页
查看>>
模块化导出
查看>>
pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页
查看>>
Sphinx 2.0.8 发布,全文搜索引擎 Installing Sphinx on Windows
查看>>
pod
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
LUOGU P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
错误org/aopalliance/intercept/MethodInterceptor解决方法
查看>>
Pylint在项目中的使用
查看>>
使用nginx做反向代理和负载均衡效果图
查看>>
access remote libvirtd
查看>>
(4) Orchard 开发之 Page 的信息存在哪?
查看>>
ASP.NET中 GridView(网格视图)的使用前台绑定
查看>>