题目链接

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

思路:先将字符转换为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. LOJ 2302 「NOI2017」整数——压位线段树

    题目:https://loj.ac/problem/2302 压30位,a最多落在两个位置上,拆成两次操作. 该位置加了 a 之后,如果要进位或者借位,查询一下连续一段 0 / 1 ,修改掉,再在含有 ...

  2. CTF | bugku | 字符?正则?

    做题链接 一个详细讲正则的网址1 一个详细讲正则的网址2 代码如下 <?php highlight_file('2.php'); $key='KEY{********************** ...

  3. Cygwin访问windows磁盘目录

     http://blog.csdn.net/duguduchong/article/details/7680650 Cygwin访问windows磁盘目录 标签: windows磁盘user平台c 2 ...

  4. fiddler 暂停抓包

    或者点击左下角 capturing

  5. 如何使用Charles对手机进行抓包

    步骤:(如下为ios步骤,安卓类似) 1)Mac安装Charles,保证手机与电脑在同一wifi(若没有WiFi时,Mac.MacBook,etc 自带热点功能) 2)在手机当前连接的wifi设置里配 ...

  6. __str__和__repr__的区别

    有时候我们想让屏幕打印的结果不是对象的内存地址,而是它的值或者其他可以自定义的东西,以便更直观地显示对象内容,可以通过在该对象的类中创建或修改__str__()或__repr__()方法来实现(显示对 ...

  7. ubantu下关于linux命令合集

    ubantu下linux的命令与操作 1.熟悉linux目录是学习linux非常必要的第一步 linux目录结构: linux目录: /:根目录,一般根目录下只存放目录,在Linux下有且只有一个根目 ...

  8. 二、python基础之列表、元组

    一.列表 列表的概念: 列表由一系列按特定顺序排列的元素组成.你可以创建包含字母表中所有字母.数字0-9或所有家庭成员姓名的列表:也可以将任何东西加入列表中,其中的元素之间没有任何关系.鉴于列表通常包 ...

  9. how to prevent lowmemorykiller from killing processes

    Hi there, I've upgraded a number of test systems to the latest Saucy beta. I've seen quite a few cas ...

  10. java虚拟机规范(se8)——class文件格式(一)

    第四章 class文件格式 本章介绍了java虚拟机的class文件格式.每一个class文件包含一个单独的类或者接口的定义.虽然类和接口不一定都定义在文件中(比如类和接口亦可以通过类加载器直接生成) ...