BZOJ4110 : [Wf2015]Evolution in Parallel

首先每个串都必须是$S$的子序列,否则无解。

按长度从小到大依次考虑每个串,如果它两边都不能放,那么无解。

如果能放一边,那么放进去,把待定的全部放入另一边。

如果两边都能放,那么看看能否待定,如果不能则把它和待定的分别放入两边。

时间复杂度$O(nm)$。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 4005
int n,i,j,x,y,len[N],b[N],f[2][N],cnt[2],q[N],t;char a[N][N];
inline bool cmp(int x,int y){return len[x]<len[y];}
inline bool check(int x,int y){
  if(len[x]>len[y])return 0;
  for(int i=j=0;i<len[x];i++){
    while(j<len[y]&&a[x][i]!=a[y][j])j++;
    if(j==len[y])return 0;
    j++;
  }
  return 1;
}
int main(){
  scanf("%d",&n);
  for(i=0;i<=n;i++){
    scanf("%s",a[i]);
    len[i]=strlen(a[i]);
    b[i]=i;
    if(!check(i,0))return puts("impossible"),0;
  }
  len[0]=0;
  std::sort(b+1,b+n+1,cmp);
  for(i=1;i<=n;i++){
    x=check(f[0][cnt[0]],b[i]);
    y=check(f[1][cnt[1]],b[i]);
    if(!x&&!y)return puts("impossible"),0;
    if(x&&!y){
      f[0][++cnt[0]]=b[i];
      for(j=1;j<=t;j++)f[1][++cnt[1]]=q[j];
      t=0;
    }
    if(!x&&y){
      f[1][++cnt[1]]=b[i];
      for(j=1;j<=t;j++)f[0][++cnt[0]]=q[j];
      t=0;
    }
    if(x&&y){
      if(check(q[t],b[i]))q[++t]=b[i];
      else{
        f[0][++cnt[0]]=b[i];
        for(j=1;j<=t;j++)f[1][++cnt[1]]=q[j];
        t=0;
      }
    }
  }
  for(j=1;j<=t;j++)f[1][++cnt[1]]=q[j];
  printf("%d %d\n",cnt[0],cnt[1]);
  for(i=1;i<=cnt[0];i++)puts(a[f[0][i]]);
  for(i=1;i<=cnt[1];i++)puts(a[f[1][i]]);
  return 0;
}

  

时间: 2024-10-13 20:27:30

BZOJ4110 : [Wf2015]Evolution in Parallel的相关文章

大量数据快速插入方法探究[nologging+parallel+append]

大量数据快速插入方法探究 快速插入千万级别的数据,无非就是nologging+parallel+append. 1     环境搭建 构建一个千万级别的源表,向一个空表insert操作. 参考指标:insert动作完成的实际时间. SQL> drop table test_emp cascadeconstraints purge; Table dropped. SQL> create table test_emp as select *from emp; Table created. SQL&

ubuntu上解决evolution邮箱附件为dat格式

问题:在Ubuntu系统上使用evolution邮箱客户端进行发送邮件,但是发送的附件都被evolution 客户端转换为了dat的格式 解决: 第一步: 第二步:

SMON: Parallel transaction recovery tried 引发的问题--转载

SMON: Parallel transaction recovery tried 这个一般是在具有在跑大数据量的 transaction的时候kill掉了进程而导致 smon 去清理 回滚段时导致的. 这个在业务高峰期的时候,如果发现这个,有可能导致 SMON 占用了 100% cpu 而导致 系统 hang 在那边.即使你shutdown immediate ,oracle 也会等待 smon 清理完毕才能关机,而这个等待过程也许是漫长的.如果你 shutdown abort,那么oracl

【狼窝乀野狼】Parallel浅尝辄止

前段时间看到园子里面有同学在用Parallel进行批量插入数据库.后面也有很多同学针对这一事件给出了自己的看法和见解.我在这里不评论内容的好坏,至少能将自己东西总结分享这个是要靠勇气和毅力. 闲话少说,我在最近看崔鹏飞的github的时候,发现他对这块也做了一定的总结,那么我就他这块进行板书与展示.案例是怎么回事呢?话说我有一个公司,里面需要统计一下总收入,另外有一个公司被我收购了,我一起计算总收入.当一天我收购了N个公司,计算总收入的时候,我们采用并行计算. 1 internal class

Parallel并行化编程

在很多场景中我们需要通过并行化的方式来提高程序运行的速度,比较典型的需求就是并行下载.前期遇到一个需求是要批量下载瓦片,每次大概下载上百万个瓦片,要想提高瓦片的下载速度,只能通过并行化的方式,下面把我解决此问题的思路和代码总结如下: 第一步确定线程个数(ThreadCount),这个要根据网络情况和硬件配置进行确定,可以做成一个配置项由用户自行确定. 第二步将任务分成ThreadCount个,此步需要注意处理任务数较少(小于线程个数)以及任务数除不尽ThreadCount的情况.处理方式为任务数

长期演进技术(LTE,Long Term Evolution)

/********************************************************************************* * 长期演进技术(LTE,Long Term Evolution) * 声明: * 在对4G模块进行移植的过程中发现对一些各种通信标准不了解,移动.联通.电信 * 他们采用的通讯标准不同,比较郁闷的是,拿着移动的卡去测试只能识别电信的模块上, * 所以了解整个LTE的发展史就成了必要了. * * 2016-1-5 深圳 南山平山村

Parallel Programming-Task Base

Parallel.For/ForEach是数据层面的并行,本文所讲的Task是将不同的操作并行执行,本文主要内容: Task的工作模型 初始化Task 完成Task 取消Task 一.Task工作模型 .Net中Task的工作模式是Fork/Join或者Master/Worker模式.核心思想是Master负责接受Client的请求,并且负责将请求分配给最终的Wroker,Worker执行完自己的工作后分别返回给Master.由Master汇总最终的结果并且返回给Client. 在.Net的Ta

Parallel类

1,用Parallel.For()方法循环     class Program     {         static void Main(string[] args)         {             //=============================第一种             Parallel.For(0,//第一个参数:开始索引                 10,//第二个参数:最大索引                 (i, parallelLoopSta

分布式并行计算方案:parallel computing by kafka-storm 发布了

HighAvailabilityToolkit1.3 发布了 version 1.3,如何在分布式集群中,充分利用多节点,对大数据进行拆分,实现并行计算,"parallel computing by kafka-storm " 提供了一种很好的思路. 源码 : https://github.com/yfwangpeng/HighAvailabilityToolkit 微博:http://weibo.com/58wp58