[CODEVS1051]接龙游戏
题目描述
给出了N个单词,已经按长度排好了序。如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙)。
你的任务是:对于输入的单词,找出最长的龙。
第一行为N(1<=N<=105)。以下N行每行一个单词(由小写组成),已经按长度排序。(每个单词长度<50)
仅一个数,为最长的龙的长度。
1<=N<=105
看到这道题,虽然知道是用栈来做,但是还是没有思路,太弱……就去找题解(捂脸熊
大概是这样子的:
我们玩过的接龙游戏一般都是A是B的后缀,则可以接龙;但是这道题为i是j的前缀,那么i->j算一次接龙,所以可以把输入的单词按字典序排序,那么前缀相同的单词就会堆在一起了(sort(ch,ch+n,cmp))
这时我们维护一个栈,首先将第一个单词入栈,将每一个单词与栈顶元素find,如果在第i个单词中第0个位置开始可以找到top,那么我们把第i个单词入栈,继续读下一个单词;
如果不能找到,则弹出栈顶元素,将第i个单词与新的栈顶元素进行相同的操作,直到栈空,将第i个单词入栈。
在以上过程中,我们可以不断更新max的值,表示栈中的元素,即最多有多少个单词可以互相接龙,max=max<stack.size()?stack.size():max;
这道题的思路就是这样子了。代码自己改了半天。。。。
代码:
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct data
{
string s;
}data;
data ch[];
bool cmp (data x,data y)
{
int len=x.s.length()>y.s.length()?x.s.length():y.s.length();
for(int i=;i<len;++i)
{
if(x.s[i]<y.s[i]) return true;
else if(x.s[i]>y.s[i]) return false;
}
if(x.s.length()<y.s.length()) return true;
else return false;
}
int main()
{
int n,max=;
cin>>n;
for(int i=;i<n;++i)
cin>>ch[i].s;
sort(ch,ch+n,cmp);
/*for(int i=0;i<n;++i)
cout<<ch[i].s<<' ';*/
stack<data> mystack;
mystack.push(ch[]);
for(int i=;i<n;++i)
{
data tmp;
tmp=mystack.top();
if(ch[i].s.find(tmp.s,)==)
{
if(tmp.s.length()!=ch[i].s.length())
mystack.push(ch[i]);
}
else
{
while(!mystack.empty())
{
tmp=mystack.top();
if(ch[i].s.find(tmp.s,)==)
break;
mystack.pop();
}
mystack.push(ch[i]);
}
max=max>mystack.size()?max:mystack.size();
}
cout<<max<<endl;
return ;
}
[CODEVS1051]接龙游戏的更多相关文章
- codevs1051接龙游戏
1051 接龙游戏
- AC日记——接龙游戏 codevs 1051
1051 接龙游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出了N个单词,已经按长度排好了序.如果 ...
- codevs 1051 接龙游戏
codevs 1051 接龙游戏 http://codevs.cn/problem/1051/ 题目描述 Description 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i- ...
- 接龙游戏(codevs 1051)
1051 接龙游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 给出了N个单词,已经按长度排好了序 ...
- Flask开发成语接龙游戏,闲来无事手机玩玩自己写的游戏吧!
英语单词学习应用 周五发布的文章Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署发布后,看到喜欢的人比较多.本来周末打算照着扇贝/极光单词,写一个英语单词自测工具.但苦 ...
- 字典树+博弈 CF 455B A Lot of Games(接龙游戏)
题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...
- codevs 1051 接龙游戏(栈模拟)
传送门 Description 给出了N个单词,已经按长度排好了序.如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙). 你的任务是:对于输入的单词,找出最长的龙. I ...
- [codevs 1051]接龙游戏(栈)
题目:http://codevs.cn/problem/1051/ 分析: 当然单词查找树是可以的,但这题有更为简便的方法.可以先按字典序排序,然后弄一个栈,如果当前字串可以接到栈顶元素的后面,那么当 ...
- codevs1051
题目地址:http://codevs.cn/problem/1051/ 分析: --题目难度:提高一等 1.数据结构(Data Structure):①Hash(用map或人工)②Stack(栈) 2 ...
随机推荐
- 微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js)
微信小游戏 demo 飞机大战 代码分析(四)(enemy.js, bullet.js, index.js) 微信小游戏 demo 飞机大战 代码分析(一)(main.js) 微信小游戏 demo 飞 ...
- ubuntu16.04更换镜像源
1.备份原有 cp /etc/apt/sources.list /etc/apt/sources.list.old 2.打开阿里巴巴镜像源: https://opsx.alibaba.com/mir ...
- 读书笔记-JavaScript面向对象编程(二)
第5章 原型 5.1 原型属性(所有函数拥有一个prototype属性,默认为空对象) 5.1.1 利用原型添加方法和属性 function Gadget(name,color){ this.name ...
- Git-Git初始化
创建版本库及第一次提交 通过如下操作来查看一下您的Git版本. $ git --version git version 1.7.4 在开始 Git 之旅之前,我们需要设置一下 Git 的配置变量,这是 ...
- 1010: [HNOI2008]玩具装箱toy(斜率优化)
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 12280 Solved: 5277[Submit][S ...
- 4819: [Sdoi2017]新生舞会(分数规划)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1031 Solved: 530[Submit][Statu ...
- TCP/IP网络编程之多线程服务端的实现(二)
线程存在的问题和临界区 上一章TCP/IP网络编程之多线程服务端的实现(一)的thread4.c中,我们发现多线程对同一变量进行加减,最后的结果居然不是我们预料之内的.其实,如果多执行几次程序,会发现 ...
- 编程高手解读什么是NodeJs?
首先在搞清楚什么NodeJs之前,我们先来聊聊JavaScript,只要做过开发的人都应该知道JavaScript是目前最为流行的前端(客户端)脚 本语言,JavaScript在Web项目中的使用率可 ...
- android 内存说明
MemoryInfo的Field如下 dalvikPrivateDirty: The private dirty pages used by dalvik. dalvikPss :The propor ...
- 【LoadRunner】loadrunner常见问题汇总
LoadRunner常见问题1.LR 脚本为空的解决方法: 1.去掉ie设置中的第三方支持取消掉 2.在系统属性-高级-性能-数据执行保护中,添加loadrunner安装目录中的vugen.exe文件 ...