洛谷P019 单词接龙 2000年NOIP提高组第三题真题

本文介绍了2000年全国奥林匹克信息学竞赛(NOIP)提高组的第三题——单词接龙。解题思路主要涉及深度优先搜索(DFS),要求在所有单词最多使用两次的情况下,确保两个相邻单词之间满足特定的连接条件。文章提供了具体的例子来说明连接规则,并给出了通过测试的代码。
摘要由CSDN通过智能技术生成

洛谷P018 乘积最大 2000年NOIP真题

点击查看题目链接

解题思路:

本题可以用过dfs搜索出来结果,但需要注意搜索的终止条件,那就是所有的单词最多使用两次,而每两个单词之间可以连接的要求是第一个单词不是第二个单词的前缀,或者第二个单词不是第一个单词的后缀,第一个单词的的尾部的子串等于第二个单词头部的子串。两个单词连接后,将消去中间的公共部分,而公共部分可以尽可能的选取短一点。

举例如下:

"abc"和"bcd"拼接后的字符串为:“abcd”
"abcc"和"ccd"拼接后的字符串为:“abccd”
"abbb"和"bbbbd"拼接后的字符串为:“abbbbbbd”
"abc"和"dd"不能拼接
"ab"和"abc"不能拼接
"abc"和"bc"不能拼接
"ab"和"cd"不能拼接

AC代码:

//
// Created by jal on 18-9-18.
//

#include <bits/stdc++.h>

using namespace std;
int len = 0;
map<string, vector<string> > m;
vector<string> v;

string get_substr(string s, int left, int right) {
   
    string ret(right - left + 1, '0');
    for (int i = left; i <= right; i++) {
   
        ret[i - left] = s[i];
    }
    return ret;
}

map<string, int> vis;

pair<int, string> add_len(string s1, string s2) {
   
    if (s1.size() == 1 || s2.size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值