【Codeforces Round #425 (Div. 2) B】Petya and Exam
【Link】:http://codeforces.com/contest/832/problem/B
【Description】
*能代替一个字符串(由坏字母组成);
?能代替单个字符(由好字母组成);
问你每个串能不能被匹配
【Solution】
对于没有*的情况;
先判断长度是否相同,不相同则不行;
否则看看问号所在的位置是不是?且,看看?对应的字母是不是好字母;
对于有*的情况;
先把左边和右边的字符和母串的对应位置对应起来;
左对齐比较和右对齐比较
然后中间部分就是用坏字母组成的字符串了;
对于母串的长度小于等于匹配串长度-2的直接输出无解;
对于母串长度等于匹配串长度-1的,除非匹配串里有*,否则直接输出无解;
【NumberOf WA】
1
【Reviw】
对于特殊情况;
还是分类讨论的方法比较好;
不然可能有意想不到的错误;
就比如这题;
我漏掉了长度不能相同;
而在长度不同的情况下对没有*的母串进行了匹配;
【Code】
#include <bits/stdc++.h>
#define LL long long
using namespace std;
string s,ts;
int good[300],len,fi=-1,Q;
bool get_ans(){
if ((int) ts.size()<= (int) s.size()-2) return false;
if ((int) ts.size()== (int) s.size()-1 && fi==-1) return false;
if (fi==-1 && (int) ts.size()!=(int)s.size()) return false;
int l = 0,r = ts.size()-1;
for (int i = 0;i <= fi-1;i++){
if (s[i]!=ts[l]) {
if (s[i]!='?')
return false;
else
if (!good[ts[l]])
return false;
}
l++;
}
for (int i = len-1;i >=fi+1;i--){
if (s[i]!=ts[r]){
if (s[i]!='?')
return false;
else
if (!good[ts[r]])
return false;
}
r--;
}
for (int i = l;i <= r;i++)
if (good[ts[i]]) return false;
return true;
}
int main(){
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio();
cin >> s;
len = s.size();
for (int i = 0;i <= len-1;i++)
good[s[i]] = 1;
cin >> s;
len = s.size();
for (int i = 0;i <= len-1;i++)
if (s[i]=='*')
fi = i;
scanf("%d",&Q);
for (int i = 1;i <= Q;i++){
cin >> ts;
int ok = false;
if (get_ans()){
cout <<"YES"<<endl;
continue;
}
cout<<"NO"<<endl;
}
return 0;
}
【Codeforces Round #425 (Div. 2) B】Petya and Exam的更多相关文章
- 【 Codeforces Round #425 (Div. 2) D】Misha, Grisha and Underground
[Link]:http://codeforces.com/contest/832/problem/D [Description] 给你一棵树; 然后给你3个点 让你把这3个点和点s,t,f对应; 然后 ...
- 【Codeforces Round #425 (Div. 2) A】Sasha and Sticks
[Link]: [Description] [Solution] 傻逼题; 获取n/k; 对n/k的奇偶性讨论一下就好 [NumberOf WA] 0 [Reviw] [Code] #include ...
- 【Codeforces Round #445 (Div. 2) C】 Petya and Catacombs
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 看看时间戳为i的点有哪些. 每次优先用已经访问过的点. 如果不行就新创一个点. 注意新创点的时间戳也是i. [代码] #includ ...
- Codeforces Round #425 (Div. 2) Problem B Petya and Exam (Codeforces 832B) - 暴力
It's hard times now. Today Petya needs to score 100 points on Informatics exam. The tasks seem easy ...
- 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- 【Codeforces Round #423 (Div. 2) C】String Reconstruction
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...
随机推荐
- video : Write and Submit your first Linux kernel Patch
http://v.youku.com/v_show/id_XNDMwNzc3MTI4.html After working with Linux (mostly as an advanced user ...
- ASCII中的控制字符含义
十进制 十六进制 控制字符 转义字符 说明 Ctrl + 下列字母 0 00 NUL \0 Null character(空字符) @ 1 01 SOH Start of Header(标题開始) ...
- java匿名内部类的使用注意事项
1.首先匿名内部类要继承自抽象基类或者实现基类接口 like this abstract class Seed{ int cnt; public Seed(int x){ cnt=x; } abstr ...
- 自己封装js组件 - 中级
书接上文,上次弄了个基本版本的alert组件(其实就是十分钟前)但是很多功能都没有实现 没有关闭按钮 没有下面确定按钮 没有模态框 没有这那的 这次终极篇就都给它完善好弄个中级版本也是基本可用版本! ...
- BZOJ3261 最大异或和 解题报告(可持久化Trie树)
本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类 ...
- OpenGL的前世和今生
这并不是一个恰当的题目,因为我主要想说的是OpenGL的今生,基于OpenGL3.x一种更现代化的方式.但是把前世和今生放在一起在语言上更加连贯,而且适当的了解过去,会帮助理解现在的OpenGL,以一 ...
- Java类和对象8
按要求编写Java应用程序. (1)创建一个叫做People的类: 属性:姓名.年龄.性别.身高 行为:说话.计算加法.改名 编写能为所有属性赋值的构造方法: (2)创建主类: 创建一 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- Svn中的tag标签的用法和意义
使用场景: 假如你的项目的某个版本已经完成测试开发.测试并已经上线,接下来街道新的需求,新项目开发需要修改多个文件的代码,当需求已经开发一段时间的时候,突然接到用户和测试人员的反馈,项目中某个重大的b ...
- 原生js实现发送验证码
var form = { myfun:function(){ var el = form.config().el; var button = form.config().button; var tim ...