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. Android ListView批量选择(全选、反选、全不选)

    APP的开发中,会常遇到这样的需求:批量取消(删除)List中的数据.这就要求ListVIew支持批量选择.全选.单选等等功能,做一个比较强大的ListView批量选择功能是很有必要的,那如何做呢? ...

  2. python中'0b111'中的b 是什么意思

    https://zhidao.baidu.com/question/987330764742072579.html binary,二进制的意思

  3. Core Data 数据出现Fault

    I am mapping Json Data from Server using Restkit and I am Displaying those data by fetching from db. ...

  4. springboot&mybatis 增删改查系列(一)

    创建父项目 首先,我们需要创建一个Maven项目. 在这个项目的pom文件中加入以下几个依赖: <!-- spring boot --> <parent> <groupI ...

  5. 【tensorflow】】模型优化(一)指数衰减学习率

    指数衰减学习率是先使用较大的学习率来快速得到一个较优的解,然后随着迭代的继续,逐步减小学习率,使得模型在训练后期更加稳定.在训练神经网络时,需要设置学习率(learning rate)控制参数的更新速 ...

  6. html5的开发

    1.html5的开发组织者: (1)WHATWG:由Apple.Mozilla.Google.Opera等浏览器开发者组成,成立于2004年.WHATWG开发HTML和Web应用API,同时为各浏览器 ...

  7. 数据采集之js埋点

    一.后台nginx环境搭建 web点数据采集后台配置nginx:https://blog.csdn.net/weixin_37490221/article/details/80894827 下载数据源 ...

  8. H3C CSMA/CD冲突检测和退避

  9. 【CSS3】3D立方体动画

    关于CSS3的3D立方体动画 知识点: 1.每个元素有独立的坐标系 2.坐标系随当前元素的改变而发生改变 3.立方体由静态transform参数构成 4.通过给容器添加动画使立方体运动 效果图: &l ...

  10. Java反射机制(五):使用反射增强简单工厂设计模式

    关于简单工厂设计模式的讲解,可参考博文<设计模式: 简单工厂模式>,此处不再介绍:  我们先观察之前介绍的关于简单工厂: public class OperateFactory { pub ...