3.约束排列(place.pas/cpp/in/out)

问题描述:

给出 n 个互不相同的小写字母,表示出现的字符类型,以及 k 个约束关系: .....,表示 ai 必须出现在 bi 前面(ai,bi 不会超出所给字符类型的范围,且

ai!=bi)。

请按照字典序输出所有满足约束条件的序列。

如:

n=3,字符类型为:x y z

k=1,约束条件为:x z,表示 x 必须出现在 z 的前面。

所有满足约束条件的排列有:

xyz

xzy

yxz

输入:

第 1 行,2 个整数 n 和 k。

第 2 行,n 个空格隔开的字符。

接下来 k 行,每行二个字符 ai 和 bi(表示约束关系),数据保证不会出现矛盾的关系。

输出:

若干行,每行 n 个字符(字符之间没有空格),表示排列的结果。

样例输入:

3 1
x y z
x z

样例输出:

xyz
xzy
yxz

数据范围:

对于 100%的数据:1<n<9,1≤k≤8。


思路

数据真的小,直接全排列,枚举即可。

对于检查是否满足K个约束,直接枚举,对于每个约束,如果先出现"应该先出现的"那就满足要求,如果先出现“应该后出现的”,那就不满足,标记之后再退出。

满足所有约束的就输出。

next_permutation( a + 1, a + n + 1 ):转为下一个全排列,没有了就返回0

(真搞不懂这种题目为嘛放T3???逗我么??估计普及-。。。)

代码

#include<bits/stdc++.h>
using namespace std; int N, K;
char s[20];
char a[20], b[20]; inline char Get(){
char ans; while( ( ans = getchar() ) < 'a' || ans > 'z' );
return ans;
} int main(){
freopen( "place.in", "r", stdin );
freopen( "place.out", "w", stdout );
scanf( "%d%d", &N, &K );
for ( int i = 1; i <= N; ++i ) s[i] = Get();
for ( int i = 1; i <= K; ++i ) a[i] = Get(), b[i] = Get();
sort( s + 1, s + N + 1 ); s[N + 1] = '\0';
do{
bool flg(1);
for ( int i = 1; i <= K; ++i )
for ( int j = 1; j <= N; ++j ){
if ( s[j] == a[i] ) break;
if ( s[j] == b[i] ){ flg = 0; break; }
}
if ( flg ) printf( "%s\n", s + 1 );
}while( next_permutation( s + 1, s + N + 1 ) );
return 0;
}

「2018-12-02模拟赛」T3 约束排列 解题报告的更多相关文章

  1. 「2018-12-02模拟赛」T1 最短路 解题报告

    1.最短路(short.pas/cpp/in/out) 问题描述: 小 C 终于被小 X 感动了,于是决定与他看电影,然而小 X 距离电影院非常远,现在假设 每条道路需要花费小 X 的时间为 1,由于 ...

  2. 「2018-11-05模拟赛」T5 传送机 解题报告

    5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...

  3. Solution -「牛客 NOIP 模拟赛」打拳

    \(\mathcal{Description}\)   现 \(2^n\) 个人进行淘汰赛,他们的战力为 \(1\sim 2^n\),战力强者能战胜战力弱者,但是战力在集合 \(\{a_m\}\) 里 ...

  4. 安徽师大附中%你赛day5 T3 树上行走 解题报告

    树上行走 题目背景 \(\mathrm{Smart}\) 的脑洞非常大, 经常幻想出一些奇怪的东西. 题目描述 某一天,\(\mathrm{Smart}\) 幻想出了一棵没有边际的二叉树,脑补着在那棵 ...

  5. [NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)

    题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色 ...

  6. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  7. #10471. 「2020-10-02 提高模拟赛」灌溉 (water)

    题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...

  8. #10470. 「2020-10-02 提高模拟赛」流水线 (line)

    题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...

  9. 2018.12.02 Socket编程之初识Socket

    Socket编程主要分为TCP/UDP/SCTP三种,每一种都有各自的优点,所以会根据实际情况决定选用何种Socket,今天开始我将会逐步学习Socket编程,并将学习过程记录于此. 今天学习的是TC ...

随机推荐

  1. Intellj IDEA14上用Debug启动项目启动不了:Unable to open debugger port: java.net.SocketException "socket closed"

    详情见上图更清晰 15:11:10 Application Server was not connected before run configuration stop, reason: Unable ...

  2. 怎么查看mysql 的binlog日志存放的位置

    image.png 这个你可以看配置文件 启用了才有这样的记录默认是没有的 linux系统中的/etc/my.cnf my.cnf内容: log-bin = mysqlbin # 默认配置 一般放在/ ...

  3. px em rem %作为单位使用

    博客地址 :https://www.cnblogs.com/sandraryan/ px 我们都很熟悉啦,但是固定大小无法适配各种屏幕. rem是CSS3新增的一个相对单位(root em,根em), ...

  4. pip 指定目录安装

    pip install --target=d:\somewhere\other\than\the\default    package_name

  5. 【t079】火星上的加法运算

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,想向你求助,作为一名 ...

  6. settTimeout vs setInterval

    setTimeout:过一段固定的时间后,将代码提交到代码队列中排队. setInterval:每隔一段固定的时间,执行一次代码. 他们两都接受两个参数,第一个参数是字符串或者函数,第二个参数是设定的 ...

  7. java spring使用Jackson过滤

    一.问题的提出. 项目使用Spring MVC框架,并用jackson库处理JSON和POJO的转换.在POJO转化成JSON时,希望动态的过滤掉对象的某些属性.所谓动态,是指的运行时,不同的cont ...

  8. Python--day39--进程池的回调函数callback

    运行结果:

  9. UWP IRandomAccessStream 与 Stream 互转

    本文告诉大家如何将 IRandomAccessStream 和 Stream 互转 如果在使用网络传输文件的时候,在 UWP 经常使用将 IRandomAccessStream 和 Stream 互转 ...

  10. P1049 找第K大的数

    题目描述 给定一个无序正整数序列, 以及另一个数n (1<=n<=1000000), 然后以类似快速排序的方法找到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3 ...