首页 > 其他分享 >[NOIP2000 提高组] 单词接龙

[NOIP2000 提高组] 单词接龙

时间:2024-05-22 09:21:26浏览次数:11  
标签:NOIP2000 int 单词 ++ 接龙 words maxn

传送锚点:https://www.luogu.com.cn/problem/P1019

题目描述

单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beastastonish,如果接成一条龙则变为 beastonish,另外相邻的两部分不能存在包含关系,例如 atatide 间不能相连。

输入格式

输入的第一行为一个单独的整数 \(n\) 表示单词数,以下 \(n\) 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在。

输出格式

只需输出以此字母开头的最长的“龙”的长度。

样例 #1

样例输入 #1

5
at
touch
cheat
choose
tact
a

样例输出 #1

23

提示

样例解释:连成的“龙”为 atoucheatactactouchoose

\(n \le 20\)。

思路

code

#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 25;
int n;
string words[maxn];
int g[maxn][maxn];//g[i][j]代表第i个单词与第j个单词能够接龙部分的长度
int used[maxn];//记每个单词使用次数
int res = 0;//记录接龙单词最长长度
void dfs(string dragon, int x) {//x为第几个单词
	res = max(res, (int)dragon.size());
	used[x]++;
	for (int i = 0; i < n; i++) {
		if (g[x][i] && used[i] < 2) {//第x个单词和第i单词能否接龙,每个单词最多出现2次
			dfs(dragon + words[i].substr(g[x][i]),i);
		}
	}
	used[x]--;

}
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> words[i];
	}
	char start;
	cin >> start;
	for (int i = 0; i < n; i++) {//对输入的单词,看是否存在接龙的部分
		for (int j = 0; j < n; j++) {
			string a = words[i];
			string b = words[j];
			for (int k = 1; k < min(a.size(), b.size()); k++) {
				if (a.substr(a.size() - k) == b.substr(0, k)) {
					g[i][j] = k;//接龙的部分,接龙后单词才越长
					break;//要实现接龙单词最长
				}
			}
		}
	}
	for (int i = 0; i < n; i++) {//找与start首字母相同的单词
		if (words[i][0] == start) {
			dfs(words[i], i);
		}
	}
	cout << res << endl;
	return 0;
}

标签:NOIP2000,int,单词,++,接龙,words,maxn
From: https://www.cnblogs.com/6Luffy6/p/18205456

相关文章

  • CSP历年复赛题-P1023 [NOIP2000 普及组] 税收与补贴问题
    原题链接:https://www.luogu.com.cn/problem/P1023题意解读:给定商品单价和对应销量表,计算使得采用预期价格销售得到最大利润时的最小补贴或者税收。解题思路:1、样例模拟31281303012031110-1-115政府预期价格:31商品成本:28,按成本价售卖销量:130商品单价:30,对应销量:120......
  • CSP历年复赛题-P1022 [NOIP2000 普及组] 计算器的改良
    原题链接:https://www.luogu.com.cn/problem/P1022题意解读:求解一元一次方程。解题思路:直接采用模拟法,对字符串进行解析设x保存未知数字母设lx保存"="左边的未知数系数,多个系数要累加设l保存"="左边的整数,多个整数要累加设rx保存"="右边的未知数系数,多个系数要累加设r保存"......
  • 139. 单词拆分
    给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。示例1:输入:s="leetcode",wordDict=["leet","code"]输出:true解释:返回......
  • 代码随想录算法训练营第第八天 | 344.反转字符串 、541. 反转字符串II、卡码网:54.替
    344.反转字符串建议:本题是字符串基础题目,就是考察reverse函数的实现,同时也明确一下平时刷题什么时候用库函数,什么时候不用库函数题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.反转字符串.html/***@param{character[]}s*@return{void}Donotret......
  • 输出最长的单词
    输入一行字符,输出最长的单词。#include<stdio.h>#include<string.h>#defineN100intLongestVoc(charstr[]);intAlpha(charc);intmain(void){charstr[N];printf("pleaseinputastring:");gets(str);intpos=LongestVoc(str);pri......
  • 一款摸鱼神器!帮助你利用上班时间背单词!
    大家好,我是Java陈序员。问君能有几多愁,唯有上班摸鱼解千愁!今天,给大家推荐一款软件,利用键盘输入来记忆英语单词,上班摸鱼可用!关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍QwertyLearner——一款为键盘工作者设计的......
  • 79. 单词搜索-c++
    给定一个mxn二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例1:输入......
  • 【初中英语提分神器】中考高频词汇大全003-D开头单词高频,轻松掌握,考试无忧!速来围观!
    PDF格式公众号回复关键字:ZKGCH003D开头单词高频动词1decide决定”或“判定We'llhavetodecidewhattodonext.(我们必须决定下一步该做什么。)Thejudgedecidedinfavorofthedefendant.(法官判定被告胜诉。)2dislike/hatedislike不喜欢Hedislikesbeingl......
  • 背单词 首字母 2024年05月
    2024-05-312024-05-302024-05-292024-05-282024-05-272024-05-262024-05-252024-05-242024-05-232024-05-222024-05-212024-05-202024-05-192024-05-182024-05-172024-05-162024-05-152024-05-142024-05-132024-05-122024-05-112024-05-102024-05-092024-05-082024-05-072024-......
  • 英语背单词 专四词汇 2024年04月 ChatGPT
    2024-05-312024-05-302024-05-292024-05-282024-05-272024-05-262024-05-252024-05-242024-05-232024-05-222024-05-212024-05-202024-05-192024-05-182024-05-172024-05-162024-05-152024-05-142024-05-132024-05-122024-05-112024-05-102024-05-092024-05-082024-05-072024-......