首先每个串都必须是$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;
}

  

最新文章

  1. VS2013的virtualpath在当前应用程序根的外部
  2. microsoft的罗马帝国——浪潮之巅
  3. java Enum 用法示例
  4. hdu1044
  5. MVC JsonResult
  6. Developing a Custom Membership Provider from the scratch, and using it in the FBA (Form Based Authentication) in SharePoint 2010
  7. BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]
  8. [吐槽]webpack4
  9. 对于Linux内核执行过程的理解(基于fork、execve、schedule等函数)
  10. Windows server 2008 R2配置多个远程连接
  11. LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)
  12. 【Android】Android 广播大全
  13. 1.oracle之表管理sql
  14. SpringBoot之使用Scheduled做定时任务
  15. 在HUE中将文本格式的数据导入hive数仓中
  16. 2.18 爬页面源码(page_source)
  17. 【bzoj1492】 NOI2007—货币兑换Cash
  18. shutil 高级文件操作
  19. Web终端SSH功能
  20. Numpy统计

热门文章

  1. NYOJ题目113字符串替换
  2. 并发用户数与 TPS 之间的关系
  3. 19.状态者模式(State Pattern)
  4. 谈谈Delphi中的类和对象1---介绍几个概念 &amp;&amp; 对象是一个地地道道的指针
  5. Golang Beego 分析(一)
  6. cordova
  7. android 入门-动画与容器
  8. Win10 UI线程
  9. ASP.NET 5探险(2):上传文件
  10. Debian下安装vim