题目链接

题意:每次给出两个字母 和 只有这两个字母的原字符串的子序列,最后让你输出原字符串。

思路:先将字符转换为hash值,然后再转换成图,就是一个拓扑排序了,然后满足不了的情况有两种,一个是构造不了给出的n字符串大小,还有就是字母去重后多了。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<vector>
  6. #include<string>
  7. #include<iostream>
  8. #include<queue>
  9. using namespace std;
  10. int n,m;
  11. char s[];
  12. vector<int>G[];
  13. int du[];
  14. string ans="";
  15. int num[];
  16. bool topo()
  17. {
  18. queue<int> q;
  19. for(int i=;i<;i++)
  20. {
  21. //printf("%d ",du[i*10000+1]);
  22. if(num[i]>&&du[i*+]==)
  23. {
  24. q.push(i*+);
  25. }
  26. }
  27. // printf("\n");
  28. while(!q.empty())
  29. {
  30. int u=q.front();
  31. q.pop();
  32. ans+=((u-)/+'a');
  33. for(int i=;i<G[u].size();i++)
  34. {
  35. if(--du[G[u][i]]==)
  36. q.push(G[u][i]);
  37. }
  38. }
  39. // cout<<ans<<endl;
  40. return n==ans.size();
  41. }
  42. int main()
  43. {
  44. scanf("%d%d",&n,&m);
  45. int M;
  46. memset(num,-,sizeof(num));
  47. M=(m-)*m/;
  48. while(M--)
  49. {
  50. char a,b;
  51. char w[];
  52. int len;
  53. scanf("%s",w);
  54. scanf("%d",&len);
  55. if(len==)
  56. continue;
  57. scanf("%s",s);
  58. int suma=;
  59. int sumb=;
  60. int pre=-;
  61. a=w[];
  62. b=w[];
  63. for(int i=;i<len;i++)
  64. {
  65. int id=;
  66. if(s[i]==a)
  67. {
  68. suma++;
  69. id=(s[i]-'a')*+suma;
  70. }
  71. if(s[i]==b)
  72. {
  73. sumb++;
  74. id=(s[i]-'a')*+sumb;
  75. }
  76. if(pre!=-)
  77. {
  78. // printf("id:%d\n",id);
  79. du[id]++;
  80. G[pre].push_back(id);
  81. }
  82. pre=id;
  83. }
  84. if(num[a-'a']==-)
  85. num[a-'a']=suma;
  86. if(num[b-'a']==-)
  87. num[b-'a']=sumb;
  88. }
  89. int sum=;
  90. for(int i=;i<m;i++)
  91. {
  92. sum+=num[i];
  93. }
  94. if(sum!=n){
  95. printf("-1\n");
  96. // printf("000");
  97. }
  98. else{
  99. if(topo())
  100. {
  101. cout<<ans<<endl;
  102. }
  103. else
  104. printf("-1\n");
  105. }
  106. }

subsequence 2的更多相关文章

  1. [LeetCode] Arithmetic Slices II - Subsequence 算数切片之二 - 子序列

    A sequence of numbers is called arithmetic if it consists of at least three elements and if the diff ...

  2. [LeetCode] Is Subsequence 是子序列

    Given a string s and a string t, check if s is subsequence of t. You may assume that there is only l ...

  3. [LeetCode] Wiggle Subsequence 摆动子序列

    A sequence of numbers is called a wiggle sequence if the differences between successive numbers stri ...

  4. [LeetCode] Increasing Triplet Subsequence 递增的三元子序列

    Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the ar ...

  5. [LeetCode] Longest Increasing Subsequence 最长递增子序列

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  6. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  7. 【LeetCode】Increasing Triplet Subsequence(334)

    1. Description Given an unsorted array return whether an increasing subsequence of length 3 exists o ...

  8. CF724D. Dense Subsequence[贪心 字典序!]

    D. Dense Subsequence time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  10. [tem]Longest Increasing Subsequence(LIS)

    Longest Increasing Subsequence(LIS) 一个美丽的名字 非常经典的线性结构dp [朴素]:O(n^2) d(i)=max{0,d(j) :j<i&& ...

随机推荐

  1. AT2705 Yes or No(组合数学)

    传送门 解题思路 首先将这个模型放到坐标轴上,\(x\)轴表示\(1\),\(y\)轴表示\(0\).问题就转化成了从\((0,0)\)走到\((n,m)\),每次可以猜测向\(x\)轴或向\(y\) ...

  2. RabbitMQ的简单应用【转】

    虽然后台使用了读写分离技术,能够在一定程度上抗击高并发,但是如果并发量特别巨大时,主数据库不能同时处理高并发的请求,这时数据库容易宕机. 问题: 现在的问题是如何既能保证数据库正常运行,又能实现用户数 ...

  3. [杂题]:B/b(二分答案)

    题目传送门(内部题53) 输入格式 第二行$2$个整数表示$n,m$.接下来$m$行每行两个整数,描述一个点对$(x_i,y_i)$. 输出格式 一个整数,表示最短距离. 样例 样例输入: 6 21 ...

  4. Transform.Find()

    代码演示: using System.Collections;using System.Collections.Generic;using UnityEngine; public class Tran ...

  5. django中常见命令总结

    一,创建一个django项目: django-admin.py startproject mysite二,在mysite目录下创建blog应用: python manage.py startapp b ...

  6. mysql的windows客户端链接远程全套案例

    我是linux 的服务器,navicat12的客户端, 开始链接的时候需要开服务器上得对外爆漏端口 3306,方法: 添加指定需要开放的端口: firewall-cmd --add-port=/tcp ...

  7. Windows下使用Composer安装yii2

    Composer简介 Composer 是PHP中用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer会帮你安装这些依赖的 ...

  8. 转 lsof命令详解

    lsof命令详解   lsof (list open files)是一个列出当前系统打开文件的工具.在linux系统环境下,任何事物都可以以文件形式存在,通过文件不仅可以访问常规的数据,还可以访问网络 ...

  9. tp5 之 "No input file specified

    tp5 之 "No input file specified" 问题 通过"域名/模块/控制器/方法"这样的方式访问的时候,浏览器输出如下: 直接通过" ...

  10. 如何通过HTTP API 调取tushare的股票数据

    长久以来,Tushare一直以固定的Python SDK方式为大家提供数据服务. 虽然在基于Python的数据分析和Python的量化策略开发很方便,但习惯用其他语言的同学们表示了“抗议”,于是在Tu ...