题意就是给多个三元组(内部没有顺序),让你构造一个序列,使得所有的三元组都是存在的

简单的思考后就会发现一个简单的思路,开头的数一定只出现一次,进而可以找到头或者尾部的第一个三元组,然后我们知道序列最开始的元素是什么,但是后面两个我们并不知道,两个的顺序是什么,但是我们知道,两个相邻的元素,可以找到连与其相邻的两个元素,然后就很简单了,每次查找下一个元素,然后看前面两个元素中,与第三个元素是否是相邻的,用map瞎搞就行,但是要注意代码的交叉覆盖

#include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define per(i,j,k) for(int i=j;i>=k;i--)
#define mp make_pair
using namespace std;
const int maxx =2e5+;
map<pii,int>p;
map<pii,int>pp;
int vis[maxx];
int ar[maxx][];
vector<int>ans;
int main(){
int n;
scanf("%d",&n);
p.clear();
int a,b,c;
memset(vis,,sizeof(vis));
rep(i,,n-){
scanf("%d%d%d",&ar[i][],&ar[i][],&ar[i][]);
a=ar[i][];
b=ar[i][];
c=ar[i][];
if(p[mp(min(a,b),max(a,b))]==){
p[mp(min(a,b),max(a,b))]=c;
}else {
pp[mp(min(a,b),max(a,b))]=c;
}
if (p[mp(min(a,c),max(a,c))]==){
p[mp(min(a,c),max(a,c))]=b;
}else {
pp[mp(min(a,c),max(a,c))]=b;
}
if (p[mp(min(b,c),max(b,c))]==){
p[mp(min(c,b),max(c,b))]=a;
}else {
pp[mp(min(c,b),max(c,b))]=a;
}
vis[a]++;
vis[b]++;
vis[c]++;
}
int st=;
for (int i=;i<=n;i++){
if (vis[ar[i][]]==){
a=ar[i][];
b=ar[i][];
st=ar[i][];
break;
}else if (vis[ar[i][]]==){
a=ar[i][];
b=ar[i][];
st=ar[i][];
break;
}else if(vis[ar[i][]]==){
a=ar[i][];
b=ar[i][];
st=ar[i][];
break;
}
}
ans.push_back(st);
if (pp[mp(min(a,b),max(a,b))]==st){
c=p[mp(min(a,b),max(a,b))];
}else {
c=pp[mp(min(a,b),max(a,b))];
}
int cc;
for (int i=;i<=n-;i++){
if (pp[mp(min(a,c),max(a,c))]!=){
ans.push_back(b);
if (pp[mp(min(a,c),max(a,c))]==b){
cc=c;
//这里要把c提出来,因为后面c已经改变的了,但是我们还是要用这个原来的值
c=p[mp(min(a,cc),max(a,cc))];
b=cc;
a=a;
}else {
cc=c;
c=pp[mp(min(a,cc),max(a,cc))];
b=cc;
a=a;
}
}else {
ans.push_back(a);
if (pp[mp(min(b, c), max(b, c))]==a) {
cc=c;
c = p[mp(min(b, cc), max(b, cc))];
a = b;
b = cc;
}else {
cc=c;
c = pp[mp(min(b, cc), max(b, cc))];
a = b;
b = cc;
}
}
}
if (p[mp(min(b,c),max(b,c))]){
ans.push_back(a);
if (vis[b]==){
ans.push_back(c);
ans.push_back(b);
}else {
ans.push_back(b);
ans.push_back(c);
}
}else {
ans.push_back(b);
if (vis[a]==){
ans.push_back(c);
ans.push_back(a);
}else{
ans.push_back(a);
ans.push_back(c);
}
} for (auto it:ans){
printf("%d ",it);
}
cout<<endl;
return ;
}
/*
5
4 1 2
4 3 2
2 3 5
* */

C - League of Leesins-构造的更多相关文章

  1. League of Leesins

    C - League of Leesins 首先找到每一串数字的头和尾两个数字,这两个数字有一个特点,就是它们在输入数据的时候都只会出现一次.我们在输出的时候用头和尾做第一数都可以. 然后第二个数只会 ...

  2. Codeforce 1255 Round #601 (Div. 2) C. League of Leesins (大模拟)

    Bob is an avid fan of the video game "League of Leesins", and today he celebrates as the L ...

  3. Codeforces Round #601 (Div. 2) C League of Leesins

    把每一次输入的一组数字存下来,然后把每个数字出现的组数存下来 然后找只出现过一次的数字a,那么这个数字a不是开头就是结尾,默认为开头(是哪个都无所谓),然后去找和它出现在同一组的两个数字b和c,而b和 ...

  4. C - League of Leesins

    乱搞一发,,竟然过了!!! 题目大意:输入一个整数n,然后n-2行,每一行3个数字,表示一个数组中连续的3个数字,然后将这3个数字的顺序打乱,然后再将这个n-2行打乱,要求还原数组. 题解:先找到前3 ...

  5. Codeforces Round #601 (Div. 2)

    传送门 A. Changing Volume 签到. Code /* * Author: heyuhhh * Created Time: 2019/11/19 22:37:33 */ #include ...

  6. Codeforces Gym 100425H H - Football Bets 构造

    H - Football BetsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...

  7. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

  8. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

  9. About 静态代码块,普通代码块,同步代码块,构造代码块和构造函数的纳闷

    构造函数用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种.特点:1:该函数的名称和所在类的名称相同.2:不需要定义返回值类型.3:该函数没有具体的返回值.记住:所有对象创 ...

  10. Eos开发——构造查询条件

    1.ajax 方式 var data = { orgid :orgid,year:year ,month: month,type:type,sortField:'sellEmpname' ,sortO ...

随机推荐

  1. bzoj月赛1805

    题目在最后,FG还不会做,等着$NicoDafaGood$和$Achen$给我讲 A 对于每一个质因子建一棵线段树,直接查询就好了 主要是看到所有数的大小都不是很大,然后质因子最多只有log个,复杂度 ...

  2. C++ string(STL)

    发现字符串问题中 string 好厉害- string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c ...

  3. python 显示彩色文本

    实现过程:      终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关.      转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用 ...

  4. fedora python访问mysql

    1 下载驱动库 http://sourceforge.net/projects/mysql-python/ 2, yum install mysql-dev* yum install python-d ...

  5. 你知道forEach和each的区别吗?

      要知道forEach和each的区别,你必须明白一点:forEach是js中的方法(针对数组),而each是jquery中的方法(针对jquery对象,即$( ) ).知道这一点,接下来我分别给举 ...

  6. windows 操作系统下git报filename too long 处理方法

    两种方法解决: 一是通过修改配置文件 [core] repositoryformatversion = filemode = false bare = false logallrefupdates = ...

  7. 【CS Round #44 (Div. 2 only) C】Check DFS

    [链接]点击打开链接 [题意] 给你一个n节点,m条边的无向联通图. 给你一个节点访问的顺序.(1..n的排列) 你可以改变每个点优先访问的出度.(但必须按照dfs的规则); 问你能不能按照所给的访问 ...

  8. Redhad的开源Paas平台:OpenShift

    参考redHat的官方文章翻译而来:https://openshift.redhat.com/community/wiki/architecture-overview OpenShift Origin ...

  9. 使用web-component搭建企业级组件库

    组件库的现状 前端目前比较主流的框架有react,vuejs,angular等. 我们通常去搭建组件库的时候都是基于某一种框架去搭建,比如ant-design是基于react搭建的UI组件库,而ele ...

  10. vscode中编译输出c++是乱码

    vscode中编译输出c++是乱码的解决 环境说明:windows下面运行vscode win + R 右键属性 查看当前编码状态 知道当前环境的编码格式后,可以改变vscode上c++的格式 点击v ...