[HAOI2008]玩具取名

[HAOI2008]玩具取名

文章目录

    • 题目描述
    • 输出描述:
    • 题解
    • 代码:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。
现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的。 输入描述:
第一行四个整数W、I、N、G。表示每一个字母能由几种两个字母所替代。 接下来W行,每行两个字母,表示W可以用这两个字母替代。
接下来I行,每行两个字母,表示I可以用这两个字母替代。 接下来N行,每行两个字母,表示N可以用这两个字母替代。
接下来G行,每行两个字母,表示G可以用这两个字母替代。 最后一行一个长度不超过Len的字符串。表示这个玩具的名字。

输出描述:

一行字符串,该名字可能由哪些字母变形而得到。(按照WING的顺序输出) 如果给的名字不能由任何一个字母变形而得到则输出“The name
is wrong!”

示例1
输入

1 1 1 1
II
WW
WW
IG
IIII

输出

IN

题解

题目虽然输入的是字母,但是我们可以当做数字来处理
重要的两个数组,均为bool型
dp[i][j][k]表示区间[i,j]是否是由k转化而来的
can[i][j][k]表示i是否可以用 j k 两个字母代替
can是在读入时更新
我们想一想区间更新的条件:
区间[l,r],中间点为k
z,z1,z2为1~4,表示为WING
如果左区间[l,k+1]可以由z1转化(即代码dp[l][k][z1]),右区间[k+1,r]可以由z2转化(代码dp[k+1][r][z2]),
z可以用z1和z2来代替(代码dp[z][z1][z2]),那是不是就说明区间[l,r]是由z转化的
(相当于z1,z2是一个中转站,用来将区间[l,r]与z联系在一起)

套上区间dp的万能模板
就能得到

for(int i=1;i<=len;i++) dp[i][i][a[i]]=true;//从i到i可以由他自己转化for(int led=1;led<len;led++)//列举长度的可能性for(int l=1;l<=len-led;l++)//列举左界的可能性 {int r=l+led;//右界可以算出来for(int k=l;k<r;k++) //在左右之间列举可能的断点 for(int z=1;z<=4;z++)  //列举l到r(需要的区间)可能转化成的字母for(int z1=1;z1<=4;z1++) // 列举l到k(借助的左区间)for(int z2=1;z2<=4;z2++)  //列举k + 1到r(借助的右区间)if(can[z][z1][z2] && dp[l][k][z1] && dp[k+1][r][z2]) 
//如果z1、z2可以转化成z 并且 l到k可以变成z1 并且k+1到r可以变成z2dp[l][r][z]=true;
//那么l到r就可以转化成z}

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=3e2+7;
int dp[maxn][maxn][maxn];
bool can[maxn][maxn][maxn];
int p[maxn];
char s[maxn];
int a[300];
int change(char i){  if(i=='W') return 1; if(i=='I') return 2;if(i=='N') return 3; if(i=='G') return 4; 
} 
int main()
{a['W']=1;a['I']=2;a['N']=3;a['G']=4;for(int i=1;i<=4;i++)cin>>p[i];for(int i=1;i<=4;i++){for(int j=1;j<=p[i];j++){char x,y;cin>>x>>y;can[i][a[x]][a[y]]=1;}}cin>>(s+1);int n=strlen(s+1);
//	cout<<n<<endl; for(int i=1;i<=n;i++)dp[i][i][a[s[i]]]=1;for(int len=2;len<=n;len++){for(int i=1;i<=n;i++){int j=i+len-1;if(j>n)break;for(int k=i;k<=j;k++){for(int z=1;z<=4;z++){for(int z1=1;z1<=4;z1++){for(int z2=1;z2<=4;z2++){if(can[z][z1][z2]&&dp[i][k][z1]&&dp[k+1][j][z2])dp[i][j][z]=1;}}}}}}bool flag=false;if(dp[1][n][1]) {flag=true;printf("W");}if(dp[1][n][2]) {flag=true;printf("I");}if(dp[1][n][3]) {flag=true;printf("N");}if(dp[1][n][4]) {flag=true;printf("G");}if(!flag) printf("The name is wrong!");
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【KMP】重复子串(ybtoj KMP-2)

正题 ybtoj KMP-2 题目大意 问你一个字符串最多由多少个相同的字符串组合而成 解题思路 如下图&#xff0c;先用KMP求出nx数组&#xff0c;那么有1∼nxn1\sim nx_n1∼nxn​和(n−nxn)∼n(n-nx_n)\sim n(n−nxn​)∼n相匹配 不难推出1∼(n−nxn)1\sim (n-nx_n)1∼(n−nxn​)…

P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】

正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 nnn个点的一张图&#xff0c;每条边有权值&#xff0c;一棵生成树的权值是所有边权和乘上边权的gcdgcdgcd&#xff0c;即 val(T)(∑i1n−1wei)gcd⁡(we1,we2,…,wen−1)val(T)\left(\sum\limits_{i1}^{n-1} w_…

C# 8小特性

对于C# 8&#xff0c;有吸引了大多数注意力的重大特性&#xff0c;如默认接口方法和可空引用&#xff0c;也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。新的赋值运算符&#xff1a;&&和||从第一个版本开始&#xff0c;C#就支持把等号和另外一…

[HAOI2016]字符合并(ing)

[HAOI2016]字符合并 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 有一个长度为 n 的 01 串&#xff0c;你可以每次将相邻的 k 个字符合并&#xff0c;得到一个新的字符并…

AtCoder Beginner Contest 174 总结

这次做了ABDF。我也不知道我怎么做的&#xff08;乱做-.- A - Air Conditioner 签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #…

【KMP】周期长度和(luogu 3435/ybtoj KMP-3)

正题 luogu 3435 ybtoj KMP-3 题目大意 定义S的proper前缀为S中非空且len<|S|的前缀&#xff0c;若Q是A的proper前缀&#xff0c;且A是QQ的前缀 现在问你字符串S所有前缀的最大周期之和 解题思路 如上图&#xff0c;对于一个字符串S&#xff0c;如果有周期Q&#xff0c;那…

P6097-[模板]子集卷积

正题 题目链接:https://www.luogu.com.cn/problem/P6097 题目大意 长度为2n2^n2n的序列a,ba,ba,b求一个ccc满足 ck∑i∣jk,i&j∅aibjc_k\sum_{i|jk,i\&j\varnothing}a_i\times b_jck​i∣jk,i&j∅∑​ai​bj​ 解题思路 从炫酷反演魔术过来的&#xff0c;顺便写…

dotnet core 开发无缝兼容Http和Websocket协议的接口服务

在应用接口开发中往往要针对不同协义开发相应的代理服务&#xff0c;但对于Websocket和http这两种协议来说就有些不同&#xff0c;从实现上来看Websocket可以说是Http的升级子协议&#xff0c; 两者在协议处理上基本一致&#xff0c;具体可以在解释Body上有所不同。FastHttpApi…

【KMP】子串拆分(ybtoj KMP-4)

正题 ybtoj KMP-4 题目大意 给出字符串S&#xff0c;问你有多少个子串满足ABA的形式&#xff0c;且∣A∣⩾k,∣B∣⩾1|A|\geqslant k,|B|\geqslant 1∣A∣⩾k,∣B∣⩾1 解题思路 可以先枚举左端点&#xff0c;然后跑KMP&#xff0c;使其满足左右两个A&#xff0c;然后判断A,…

[SDOI2008]SUE的小球

[SDOI2008]SUE的小球 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 Sue和Sandy最近迷上了一个电脑游戏&#xff0c;这个…

Codeforces Round #661 (Div. 3)

A - Remove Smallest 排个序&#xff0c;如果相邻的数大于一就不满足题意 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #include<alg…

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用。当然&#xff0c;在真实的产线环境中需要分析的数据和难度远远高于demo所示&#xff0c;所以demo的作用也仅仅只能起到介绍工具的作用。通常正常情况下&#xff0c;分析个几天才能得出一个结论的的结果都还是比较…

P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出A,B,dA,B,dA,B,d求有多少对(a,b)(a,b)(a,b)满足gcd(a,b)dgcd(a,b)dgcd(a,b)d且a∈[1,A],b∈[1,B]a\in[1,A],b\in[1,B]a∈[1,A],b∈[1,B] 解题思路 很显然的…

【Trie】最大异或对(ybtoj Trie-2)

正题 ybtoj Trie-2 题目大意 给你n个数&#xff0c;选择2个&#xff0c;使其异或值最大 解题思路 对于每个数的二进制建立Trie&#xff0c;然后每个数在Trie中搜索&#xff0c;每次尽量走不同方向 代码 #include<cstdio> #include<cstring> #include<iostrea…

[SCOI2003]字符串折叠

[SCOI2003]字符串折叠 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 折叠的定义如下&#xff1a; 一个字符串可以看成它自身的折叠。记作S S X(S)是X(X>1)个S连接在一…

Codeforces Round #662 (Div. 2)

就写了两个题&#xff0c;以为要掉分&#xff0c;结果早上起来发现还上分了&#xff08;说明wtcl A - Rainbow Dash, Fluttershy and Chess Coloring 无论边长是奇数还是偶数&#xff0c;考虑每次操作最外层的一圈&#xff0c;一个人操作一圈的一般&#xff0c;然后另一个人就…

.NET微服务方案调查

.NET Core就是专门针对模块化的微服务架构而设计&#xff0c;调查下大家选择.NET微服务情况&#xff0c;如果你有微服务方面的需求可以找我哦&#xff0c;可加我微信geffzhang&#xff1a;相关文章&#xff1a;Service Fabric 与Ocelot 的集成Ocelot简易教程&#xff08;二&…

Loj#116-[模板]有源汇有上下界最大流

正题 题目链接:https://loj.ac/p/116 题目大意 nnn个点mmm条边的一张图&#xff0c;每条边有流量上下限制&#xff0c;求源点到汇点的最大流。 解题思路 先别急着求上面那个&#xff0c;考虑一下怎么求无源点汇点的上下界可行流。 可以考虑先把下限流满&#xff0c;这样就会…

【Trie】最长异或路径(ybtoj Trie-3/luogu 4551)

正题 ybtoj Trie-3 luogu 4551 题目大意 给你一棵树&#xff0c;让你找一条路径&#xff0c;使这条路径的亦或值最大 解题思路 对于每个数存下到根节点的亦或值&#xff0c;然后拿这些数去Trie中跑最大亦或 因为相同部分亦或后为0&#xff0c;所以得出结果就是最大路径亦或…

Codeforces Round #663 (Div. 2)

2020/8/9晚上断网了&#xff0c;本来不想打就顺便看看题目&#xff0c;发现能做几个&#xff0c;然后就交了。&#xff08;做完1、2两题才敢交&#xff09;最终做了3个题tcl。 A - Suborrays 脑筋急转弯题目。位运算OR运算结果只会变大不会变小&#xff0c;直接正序输出就可 …