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

简单的思考后就会发现一个简单的思路,开头的数一定只出现一次,进而可以找到头或者尾部的第一个三元组,然后我们知道序列最开始的元素是什么,但是后面两个我们并不知道,两个的顺序是什么,但是我们知道,两个相邻的元素,可以找到连与其相邻的两个元素,然后就很简单了,每次查找下一个元素,然后看前面两个元素中,与第三个元素是否是相邻的,用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. Liferay 7:Liferay DXP全套教程内附源码

    分享是美德 都是英文教程,有不明白的问题可以随时咨询我. http://www.javasavvy.com/liferay-7-hooks-tutorials/

  2. 唱吧基于 MaxCompute 的大数据之路

    使用 MaxCompute之前,唱吧使用自建体系来存储处理各端收集来的日志数据,包括请求访问记录.埋点数据.服务器业务数据等.初期这套基于开源组件的体系有力支撑了数据统计.业务报表.风控等业务需求.但 ...

  3. 洛谷P3298 泉

    时空限制 1000ms / 128MB 题目描述 作为光荣的济南泉历史研究小组中的一员,铭铭收集了历史上x个不同年份时不同泉区的水流指数,这个指数是一个小于. 2^30的非负整数.第i个年份时六个泉区 ...

  4. MySQL:比较两个数据表不同部分

    简单比较 1.SELECT * FROM t2 WHERE id NOT IN (SELECT id FROM t1); 2.SELECT * FROM t2 WHERE NOT EXISTS(SEL ...

  5. 怎么比较两个list中相同的值个数!

    怎么比较两个list中相同的值个数!int count=0;for(int i=0;i<list1.size();i++){ for(int j=0;j<list2.size();j++) ...

  6. 数据库--sql语句

    数据库的操作语句总共四大类:增insert into  删delete  改update  查select; 增:INSERT INTO `表名`(`字段名`,`字段名`) `VALUES`('值', ...

  7. Leetcode34.Find First and Last Position of Element in Sorted Array在排序数组中查找元素的位置

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...

  8. javascript之键盘事件的方法

    键盘事件包含onkeydown.onkeypress和onkeyup这三个事件 事件初始化 function keyDown(){} document.onkeydown = keyDown; //论 ...

  9. Vue--过渡动画实现的三种方式

    一.使用vue的transition标签结合css样式完成动画 <!DOCTYPE html> <html lang="en"> <head> ...

  10. 百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。

    百度为何开源深度机器学习平台?   有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举.   5月20日,百度在github上开源了其 ...