2019.7.25

T1.匹配

  一看就是KMP的嘛,但是忘了。

    啊,要背模板的啦!

     啊?!暴力72分?!?!?!       Get!

     正解就是一般的KMP,把a串与b串接起来(之间加一点乱七八糟),然后get_next;

    没了。

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 #define RE register
 4 using namespace std;
 5 inline int R(){
 6     RE char c=getchar();int x=0,t=1;
 7     while(c<'0'||c>'9'){if(c=='-') t=-1;c=getchar();}
 8     while(c>='0'&&c<='9') {x=(x<<3)+(x<<1)+c-'0';c=getchar();}
 9     return x*t;
10 }
11 const int maxn=5000010;
12 int la,lb,lc;
13 char a[maxn],b[maxn],c[maxn],d;
14 int nxt[maxn];
15 void get_nxt(){
16     int p=0;nxt[1]=0;
17     for(int i=2;i<=lc;i++){
18         while(p&&c[p+1]!=c[i]) p=nxt[p];
19         if(c[p+1]==c[i]) p++;
20         nxt[i]=p;
21     }
22 }
23 int main (){
24 //        freopen("in1.txt","r",stdin);
25     int t;
26     t=R();
27     while(t--){
28         la=R(),lb=R();
29         scanf("%s",a+1);
30         cin>>d;
31         for(int i=1;i<=lb;i++)
32             b[i]=a[i];
33         b[++lb]=d;
34         for(int i=1;i<=la;i++) c[i]=a[i];
35         lc=la;
36         c[++lc]='~';
37         c[++lc]='!';
38         for(int i=1;i<=lb;i++) c[i+lc]=b[i];
39         lc+=lb;
40         get_nxt();
41         printf("%d\n",nxt[lc]);
42     }
43     return 0;
44 }
View Code        

T2.回家

  考场:一看就是tarjan跑点双缩点,再干.......(dfs或拓扑或最短路或lca),但终究码力不行,码一半放弃了。

  正解:就是这样的,缩点后建成圆方树,再跑dfs压栈

         某大佬提出:缩点后建树,再跑O(n)的lca(只记录父亲)。可行

         又有大佬提出:跑最短路,边双缩点,据说不对,90分。

       论加强码力的重要性。。。

      等等!要开八倍空间!!!!!!!!!!!

         圆方树开二倍,无向边开二倍,然后边开4倍,点开2倍。

 

  1 #include<bits/stdc++.h>
  2 #define ll long long
  3 #define RE register
  4 using namespace std;
  5 const int N=2e5+100;
  6 const int maxn=N*2;
  7 const int maxm=N*4;
  8 inline int R(){
  9     RE char b=getchar();int x=0,t=1;
 10     while(b<'0'||b>'9'){if(b=='-') t=-1;b=getchar();}
 11     while(b>='0'&&b<='9') {x=(x<<3)+(x<<1)+b-'0';b=getchar();}
 12     return x*t;
 13 }
 14 int n,m;
 15 struct Edge{
 16     int f,nxt,to;
 17 }ed[maxm],edg[maxm];
 18 int head[maxn],ecnt;
 19 void addedge(int f,int to){
 20     ed[++ecnt].f=f;
 21     ed[ecnt].to=to;
 22     ed[ecnt].nxt=head[f];
 23     head[f]=ecnt;
 24 }
 25 int headg[maxn],egcnt;
 26 void add(int f,int to){
 27     edg[++egcnt].f=f;
 28     edg[egcnt].to=to;
 29     edg[egcnt].nxt=headg[f];
 30     headg[f]=egcnt;
 31 }
 32 void input_(){
 33     n=R(),m=R();
 34     for(int i=1,a,b;i<=m;i++){
 35         a=R(),b=R();
 36         if(a==b) continue;
 37         addedge(a,b);
 38         addedge(b,a);
 39     }
 40 }
 41 int sta[maxn],tp,root;
 42 int dfn[maxn],low[maxn],num;
 43 bool vis[maxn],cut[maxn];
 44 
 45 int dcc_num;
 46 vector<int> dcc[maxn];
 47 void tarjan(int x){
 48     sta[++tp]=x;
 49     int flag=0;
 50     dfn[x]=low[x]=++num;
 51     for(int i=head[x];i;i=ed[i].nxt){
 52         int v=ed[i].to;
 53         if(!dfn[v]) {
 54             tarjan(v);
 55             low[x]=min(low[x],low[v]);
 56             if(low[v]>=dfn[x]){
 57                 flag++;
 58                 if(root!=x||flag>1) cut[x]=1;
 59                 int temp;
 60                 dcc_num++;
 61                 do{
 62                     temp=sta[tp--];
 63                     dcc[dcc_num].push_back(temp);
 64                 }while(temp!=v);
 65                 dcc[dcc_num].push_back(x);
 66             }
 67         }
 68         else  low[x]=min(low[x],dfn[v]);
 69     }
 70 }
 71 
 72 int pos[maxn],biao[maxn];
 73 void work_(){
 74     num=dcc_num;
 75     for(int i=1;i<=n;i++)
 76         if(cut[i]) pos[i]=++num,biao[num]=i;
 77     for(int i=1;i<=dcc_num;i++){
 78         for(int j=0;j<dcc[i].size();j++){
 79             if(cut[dcc[i][j]]) add(i,pos[dcc[i][j]]),add(pos[dcc[i][j]],i);
 80             else pos[dcc[i][j]]=i;
 81         }
 82         dcc[i].clear();
 83     }
 84 }
 85 
 86 bool ok=0;
 87 void dfs(int x) {
 88     vis[x]=1;
 89     if(x==pos[n]) {ok=1;return ;}
 90     if(ok) return ;
 91     for(int i=headg[x];i;i=edg[i].nxt){
 92         int v=edg[i].to;
 93         if(vis[v]) continue;
 94         if(biao[v]) sta[++tp]=biao[v];
 95         dfs(v);
 96         if(biao[v]&&!ok) tp--;
 97         if(ok) return ;
 98     }
 99     return ;
100 }
101 void clear_(){
102     memset(ed,0,sizeof ed);
103     memset(edg,0,sizeof edg);
104     tp=0,ecnt=egcnt=num=0,ok=dcc_num=0;
105     memset(cut,0,sizeof cut);
106     memset(dfn,0,sizeof dfn);
107     memset(low,0,sizeof low);
108     memset(head,0,sizeof head);
109     memset(headg,0,sizeof headg);
110     memset(pos,0,sizeof pos);
111     memset(biao,0,sizeof biao);
112 }
113 int main(){
114 //    freopen("in_B.txt","r",stdin);
115     int t=R();
116     while(t--){
117         clear_();
118         input_();
119         root=1,tarjan(1);//dian shuang
120 //    for(int i=1;i<=dcc_num;i++){
121 //            for(int j=0;j<dcc[i].size();j++)
122 //                printf("%d ",dcc[i][j]);
123 //            puts("");
124 //        }
125 //        for(int i=1;i<=n;i++) if(cut[i]) cout<<i<<" ";
126 //        puts("");
127 //        puts("");
128             
129         work_();
130         tp=0;
131         memset(vis,0,sizeof vis);
132         dfs(pos[1]);
133         memset(vis,0,sizeof vis);
134         int ans=0;
135         while(tp){
136             int tmp=sta[tp--];
137             if(!vis[tmp]&&tmp!=1&&tmp!=n){
138                 ans++;vis[tmp]=1;
139             }
140         }
141         printf("%d\n",ans);
142         for(int i=1;i<=n;i++) if(vis[i]) printf("%d ",i);
143         puts("");
144     }
145     return 0;
146 }
View Code

 

 

 

T3.寿司

  不会,先搁着吧。

转载于:https://www.cnblogs.com/sdfzjdx/p/11244648.html

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

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

相关文章

gentoo安装记录[20050216]

原作者: * 20050216: 我明天 (17 号) 要去武汉陪 gf 几天, 顺便找找工作 (如果你有武汉的工作信息, 记得一定给我发信或者直接联系我! 非常非常感谢先!!), 可能有几天上不来了, 所以赶紧把这帖子搞定啦! 大家有啥想法/意见的就跟帖提, 我回来改 * 20050215: 完成内核安装/内核…

注册Windows Phone Marketplace经验

简介 经过漫长漫长的等待以后&#xff0c;终于注册成功Windows Phone Marketplace&#xff0c;把经验分享一下。 登记注册 打开https://windowsphone.create.msdn.com/Register/ &#xff0c;使用live id&#xff08;msn id&#xff09;登陆&#xff0c;然后按照向导一步步注册…

iOS应用日志:开始编写日志组件与异常日志

经营你的iOS应用日志&#xff08;一&#xff09;&#xff1a;开始编写日志组件 对于那些做后端开发的工程师来说&#xff0c;看LOG解Bug应该是理所当然的事&#xff0c;但我接触到的移动应用开发的工程师里面&#xff0c;很多人并没有这个意识&#xff0c;查Bug时总是一遍一遍的…

java代码情书_程序员们的爱情表白书

下面看看我们程序员是如何用自己的语言说出爱你。就算闷呆&#xff0c;也要闷呆得很性感。java程序员的情书我能抽象出整个世界&#xff0e;&#xff0e;&#xff0e;但是我不能抽象出你&#xff0e;&#xff0e;&#xff0e;因为你在我心中是那么的具体&#xff0e;&#xff0…

motorola 企业移动解决方案

&#xff08;一&#xff09;moto数据采集解决方案 数据采集和查询&#xff0c;可随时随地记录并传输各种形式的数据 安全便捷接入企业数据库&#xff0c;实现数据前后台无缝整合 终端小巧&#xff0c;方便携带&#xff1b;快速、低成本的实现高效移动远程管理 &#xff08;二&a…

使用乱序标签来控制HTML的输出效果

在HTML的元素中&#xff0c;有一个比较特殊的元素form。我们用它来收集表单数据并提交给服务器&#xff0c;并且理论上说来它是没有任何的UI被呈现的。当然如果我们在body元素后紧跟一个form&#xff0c;这样一来似乎看不出来有什么UI呈现的问题&#xff0c;可是当form存在于别…

杭电2019多校第一场,Problem I,String 2019

题目描述 Tom has a string containing only lowercase letters. He wants to choose a subsequence of the string whose length is k and lexicographical order is the smallest. Its simple and he solved it with ease.But Jerry, who likes to play with Tom, tells him …

2024年最新Python爬虫入门『最强教程』新鲜出炉!

近年来&#xff0c;大数据成为业界与学术界最火热的话题之一&#xff0c;数据已经成为每个公司极为重要的资产。互联网大量的公开数据为个人和公司提供了以往想象不到的可以获取的数据量。而掌握网络爬虫技术可以帮助你获取这些有用的公开数据集。 爬虫能干什么呢&#xff1f;一…

使用LUA构建页面

Android&#xff0c;LUA&#xff0c;CoronaCard 使用CoronaCard引擎构建页面&#xff0c;只需要嵌入CoronaView&#xff0c;就可以构建灵活多样的页面。 微游手柄游戏厅 4.0版本&#xff0c;全面改版&#xff0c;使用LUA语言&#xff0c;通过CoronaCard引擎构建。 一 界面效果&…

C#实现Singleton (转载)

您要在 C# 中构建应用程序。您需要只有一个实例的类&#xff0c;并且需要提供一个用于访问实例的全局访问点。您希望确保您的解决方案高效&#xff0c;并且能够利用 Microsoft? .NET 公共语言运行库功能。您可能还希望确保解决方案是线程安全的。 实现策略 尽管 Singleton 是一…

JQuery VS JS DOM

JQ断断续续的也用了一阵子了.对我来说确实是个小小的突破。之前的javascript 简直是 一塌糊涂。。糊涂到 连:document.getElementById("") 这个语句都不会写。哈哈这也算是选择JQ的一个理由吧&#xff0c;因为JQ 只需要$("#ID") $(".Class") 就可…

java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)

在阎宏博士的《JAVA与模式》一书中开头是这样描述合成(Composite)模式的&#xff1a;html合成模式属于对象的结构模式&#xff0c;有时又叫作“部分——总体”模式。合成模式将对象组织到树结构中&#xff0c;能够用来描述总体与部分的关系。合成模式可使客户端将单纯元素与复合…

XAF Excel数据导入模块使用说明与源码

我实现了XAF项目中Excel数据的导入&#xff0c;使用Devexpress 新出的spreadsheet控件&#xff0c;可能也不新了吧:D 好&#xff0c;先看一下效果图&#xff1a;下图是Web版本的。 下面是win版&#xff1a; 功能说明&#xff1a; 支持从Excel任意版本导入数据&#xff0c;可以使…

ASP注入漏洞基础教程(二)

进 阶 篇 在入门篇&#xff0c;我们学会了&#xff33;&#xff31;&#xff2c;注入的判断方法&#xff0c;但真正要拿到网站的保密内容&#xff0c;是远远不够的。接下来&#xff0c;我们就继续学习如何从数据库中获取想要获得的内容&#xff0c;首先&#xff0c;我们先看看&…

linux 内存清理/释放命令

1.清理前内存使用情况 free -m2.开始清理 echo 1 > /proc/sys/vm/drop_caches3.清理后内存使用情况 free -m4.完成!查看内存条数命令&#xff1a; dmidecode | grep -A16 "Memory Device$" # sync# echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys…

dotnet程序优化心得(三)

&#xff08;4&#xff09;继续优化――用空间换取时间 现在对每一个字符&#xff0c;都要用get_Item(object key)方法过一遍&#xff0c;可这个乖乖方法那么长&#xff0c;肯定太耗时间了&#xff0c;能不能用更简单的手段呢&#xff1f;改Hashtable&#xff1f;哇&#xff0c…

【Mininet】Mininet使用源码安装

实验参考&#xff1a; Mininet使用源码安装 实验步骤&#xff1a; 1. 更新软件&#xff08;用#sudo apt-get update与#sudo apt-get upgrade&#xff09;。 2. 从github上获取mininet源码&#xff08;#git clone git://github.com/mininet/mininet&#xff09;。 3. 获取完后&a…

【Mininet】Mininet可视化应用

实验参考&#xff1a; Mininet可视化应用 实验步骤&#xff1a; 1. 用命令启动mininet可视化界面&#xff08;#cd mininet/mininet/example #./miniedit.py&#xff09;&#xff0c;同时开启另一终端打开Opendaylight。 2. 用鼠标选择左侧的对应的网络组件&#xff0c;然后在空…

【Mininet】Mininet命令延伸实验扩展

实验参考&#xff1a; Mininet命令延伸实验扩展 实验步骤&#xff1a; 1.用命令实现 #sudo mn --topo minimal #最小的网络拓扑&#xff0c;一个交换机下挂两个主机。 #sudo mn --topo linear,4 #每个交换机连接一个主机&#xff0c;交换机间相连接。本例&#xff1a;4个主机&a…

java非检查性异常有哪些_Java异常处理-检查性异常、非检查性异常、Error

一、Java异常处理详解异常.png目录&#xff1a;1.java中异常的分类1.1 异常(Exception)1.1.1 运行时异常(RuntimeException)可以不需要捕获1.1.2 编译异常(IOException)编译器会提示要捕获&#xff0c;如果不进行捕获则编译器会报错1.2 错误(Error)3.java处理异常机制4.throw和…