[CQOI2014]通配符匹配

https://www.zybuluo.com/ysner/note/1311407

题面

几乎所有操作系统的命令行界面\((CLI)\)中都支持文件名的通配符匹配以方便用户。
最常见的通配符有两个,一个是星号,可以匹配\(0\)个及以上的任意字符;
另一个是问号,可以匹配恰好一个任意字符。
现在需要你编写一个程序,对于给定的文件名列表和一个包含通配符的字符串,判断哪些文件可以被匹配。

  • \(n\leq100,|S|\leq10^5\)
  • 通配符个数\(\leq10\)

    解析

    由于一些不可言妙的错误,我调这破题的时间跨度长达4h

状态显然是\(f[i][j]\)表示上面的串匹配到第\(i\)位,下面的串匹配到第\(j\)位。

然后注意到上面那串中最值得商榷的是一个通配符匹配哪些字符。
所以可以把上面的串简化为通配符形式,通配符之间的部分用哈希与下面匹配就行。

这样复杂度就对了,\(O(n*10|S|)\)
然后讨论下转移就行。

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#define ll unsigned long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;++i)
#define fq(i,a,b) for(re int i=a;i>=b;--i)
using namespace std;
const int N=2e5+100;
int n,m,tot,sta[50],top,ans;
ll ht[N],hs[N],jc[N];
char T[N],S[N];
bool f[20][N];
il int gi()
{re int x=0,t=1;re char ch=getchar();while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') t=-1,ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*t;
}
int main()
{scanf("%s",T+1);n=strlen(T+1)+1;T[n]='?';jc[0]=1;fp(i,1,N-100) jc[i]=jc[i-1]*2333;fp(i,1,n){ht[i]=ht[i-1]*2333+T[i];if(T[i]=='*'||T[i]=='?') sta[++top]=i;}tot=gi();while(tot--){scanf("%s",S+1);m=strlen(S+1)+1;S[m]='#';fp(i,1,m) hs[i]=hs[i-1]*2333+S[i];memset(f,0,sizeof(f));f[0][0]=1;fp(i,0,top){if(T[sta[i]]=='*') fp(j,1,m) f[i][j]|=f[i][j-1];fp(j,0,m){if(!f[i][j]) continue;re int lt=sta[i]+1,rt=sta[i+1]-1,ls=j+1,rs=j+(rt-lt+1);if(ht[rt]-ht[lt-1]*jc[rt-lt+1]==hs[rs]-hs[ls-1]*jc[rs-ls+1])f[i+1][rs+(T[sta[i+1]]=='?')]|=f[i][j];}}puts(f[top][m]?"YES":"NO");}return 0;
}

SOS:谁能帮我查下这份代码问题出在哪里。。。(用来交[AHOI2005]病毒检测)

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#define ll unsigned long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;++i)
#define fq(i,a,b) for(re int i=a;i>=b;--i)
using namespace std;
const int N=1005;
int n,m,tot,f[N][N],sta[N],top,jc[N],ans;
ll ht[N],hs[N];
char T[N],S[N];
il int gi()
{re int x=0,t=1;re char ch=getchar();while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') t=-1,ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*t;
}
int main()
{scanf("%s",T+1);n=strlen(T+1)+1;T[n]='?';jc[0]=1;fp(i,1,1000) jc[i]=jc[i-1]*2333;fp(i,1,n){ht[i]=ht[i-1]*2333+T[i];if(T[i]=='*'||T[i]=='?') sta[++top]=i;}tot=gi();while(tot--){scanf("%s",S+1);m=strlen(S+1)+1;S[m]='#';fp(i,1,m) hs[i]=hs[i-1]*2333+S[i];memset(f,0,sizeof(f));f[0][0]=1;fp(i,1,top){re int l=sta[i-1]+1,r=sta[i]-1;fp(j,r-l+1,m){if(ht[r]-ht[l-1]*jc[r-l+1]==hs[j]-hs[j-(r-l+1)]*jc[r-l+1])f[i][j+(T[sta[i]]=='?')]|=f[i-1][j-(r-l+1)];}if(T[sta[i]]=='*') fp(j,1,m) f[i][j]|=f[i][j-1];}ans+=1-f[top][m];}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/yanshannan/p/9795666.html

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

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

相关文章

jsp常用的onchange事件

定义和用法&#xff1a; onchange 事件会在域的内容改变时发生。 onchange 事件也可用于单选框与复选框改变后触发的事件。例如<input>、<select>、<textarea> <input type"text" id"name" onchange"myFunction()">&…

POJ Area of Simple Polygons 扫描线

这个题lba等神犇说可以不用离散化&#xff0c;但是我就是要用。 题干&#xff1a; DescriptionThere are N, 1 < N < 1,000 rectangles in the 2-D xy-plane. The four sides of a rectangle are horizontal or vertical line segments. Rectangles are defined by their…

window.print()打印时,如何自定义页眉/页脚、页边距

自定义页眉/页脚、页边距&#xff0c;要用到ActiveX控件&#xff08;在ie的安全设置的启用&#xff09;&#xff0c;会修改注册表中ie的设置&#xff0c;代码如下。 try{ var hkey_root,hkey_path,hkey_key; hkey_root"HKEY_CURRENT_USER"; hkey_path"\\Soft…

java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String

这个问题是&#xff0c;类型转换出错&#xff0c;为什么呢&#xff1f; 因为BigDecimal不能强制转换成 String类型&#xff0c;要用toString()转换。

String转换为int类型

在java中使用 Integer.parseInt 在js中使用 parseInt

Luogu P4205 [NOI2005]智慧珠游戏

P4205 [NOI2005]智慧珠游戏 题意 题目描述 智慧珠游戏拼盘由一个三角形盘件和\(12\)个形态各异的零件组成。拼盘的盘 件如图\(1\)所示 对于由珠子构成的零件&#xff0c;可以放到盘件的任一位置&#xff0c;条件是能有地方放&#xff0c;且尺寸合适&#xff0c;所有的零件都允许…

js中给多个class属性的标签赋值

根据ID给标签赋value值&#xff0c; document.getElementById("id").value"张三"; 当有多个class属性时&#xff0c; for(var i0;i<10;i){document.getElementsByClassName("name")[i].value"李四"; }

Cannot set property 'value' of undefined

一般情况都是js报错引起的&#xff0c;根据实际总结到&#xff1a; 1、js页面初始化时&#xff0c;执行$(document).ready(function(){})方法&#xff0c; 当你要加载的页面内容很多时&#xff0c;你的页面还未加载完&#xff0c;执行初始化函数报错。 2、在初始化函数中&…

Spring Boot + Spring Cloud 构建微服务系统(三):服务消费和负载(Feign)

Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端。它使得编写Web服务客户端变得更加简单。我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口的绑定。它具备可插拔的注解支持&#xff0c;包括Feign注解、JAX-RS注解。它也…

Scrapy突破反爬虫的限制

7-1 爬虫和反爬的对抗过程以及策略基本概念爬虫&#xff1a;自动获取网站数据的程序&#xff0c;关键是批量的获取反爬虫&#xff1a;使用技术手段防止爬虫程序的方法误伤&#xff1a;反爬技术将普通用户识别为爬虫&#xff0c;如果误伤过高&#xff0c;效果再好也不能用一般ip…

Oracle中“不等于”的使用

在oracle中判断字段id不是“123”时&#xff0c; select * from user where id<> 123; 但是id为空的&#xff0c;却怎么也查询不出来。 这是why&#xff1f;原因是&#xff1a;字段为null的时候&#xff0c;只能通过is null或者is not null来判断。 这样写才是正确的…

wpf控件

控件——载应用程序上与用户进行交互的元素 所有的控件都是继承自System.windows.Control类&#xff0c;该类提供了一些基本的属性 1、 设置控件对齐方式 2、 设置Tab键顺序 3、 支持绘制背景&#xff0c;前景和边框 4、 支持格式化文本内容的尺寸和字体 Background&#xff1a…

The import javax.servlet cannot be resolved

错误的原因是&#xff1a;缺少servlet-api.jar这个包&#xff0c;将这个包导入项目里面就可以了。1. 我们可以到tomcat的lib目录下面找到这个包&#xff0c;然后在eclipse中&#xff0c;右击项目&#xff0c;2. 选择Java Build Path>Libraries>Add ExternalJARS,找到你计…

mybatis中修改了数据,控制台显示成功,数据库没有修改

在mybatis中遇到了修改数据时&#xff0c;控制台显示修改成功&#xff0c;但是去数据库查看并没有修改&#xff0c;这是因为mybatis不时自动提交事务的&#xff0c;所以是不会修改数据库的数据&#xff0c;这是我们加上一句 sqlSession.commit()就可以了。转载于:https://www.c…

The type Resource is not accessible due to restriction on required library

项目属性preferences>java build path>把右侧【libraries中的JRE System Library】删除重新导入.

BZOJ1500 [NOI2005]维修数列(Splay tree)

[Submit][Status][Discuss]Description 请写一个程序&#xff0c;要求维护一个数列&#xff0c;支持以下 6 种操作&#xff1a;请注意&#xff0c;格式栏 中的下划线‘ _ ’表示实际输入文件中的空格Input 输入的第1 行包含两个数N 和M(M ≤20 000)&#xff0c;N 表示初始时数列…

日期格式转换:String 与 date

在java中转换 //String—>Date String time “2018-01-09”&#xff1b; try{SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd");Date date sdf.parse(time); }catch(ParseException e){System.out.println(e.getMessage()); } //Date—>String S…

在java中对null的理解

转载&#xff1a;https://www.cnblogs.com/X-World/p/5686122.html Java中的Null是什么&#xff1f; 1&#xff09;首先&#xff0c;null是关键字&#xff0c;像public、static、final。它是大小写敏感的&#xff0c;你不能将null写成Null或NULL&#xff0c;编译器将不能识别…

obs video-io.c

video_frame_init 讲解 /* messy code alarm video_frame_init 函数用于初始化视频帧。它接受一个指向 struct video_frame 结构体的指针 frame&#xff0c; 视频格式 format&#xff0c;以及宽度 width 和高度 height。该函数根据视频格式的不同&#xff0c;计算出每个视频帧…

如何解决SVN 清理失败

解决方法&#xff1a; 下载 sqlite3.exe 在你的清理失败的路径下查看.svn目录下是否存在一个wc.db文件&#xff0c;把解压好的sqlite3.exe 放在wc.db文件的同一路径下 注意&#xff1a;主要是用sqlite3.exe清理掉wc.db中的相关信息。 通过cmd命令行进入你清理失败的路径&am…