C - League of Leesins-构造
时间:2019-11-27
本文章向大家介绍C - League of Leesins-构造,主要包括C - League of Leesins-构造使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意就是给多个三元组(内部没有顺序),让你构造一个序列,使得所有的三元组都是存在的
简单的思考后就会发现一个简单的思路,开头的数一定只出现一次,进而可以找到头或者尾部的第一个三元组,然后我们知道序列最开始的元素是什么,但是后面两个我们并不知道,两个的顺序是什么,但是我们知道,两个相邻的元素,可以找到连与其相邻的两个元素,然后就很简单了,每次查找下一个元素,然后看前面两个元素中,与第三个元素是否是相邻的,用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+6; map<pii,int>p; map<pii,int>pp; int vis[maxx]; int ar[maxx][3]; vector<int>ans; int main(){ int n; scanf("%d",&n); p.clear(); int a,b,c; memset(vis,0,sizeof(vis)); rep(i,1,n-2){ scanf("%d%d%d",&ar[i][0],&ar[i][1],&ar[i][2]); a=ar[i][0]; b=ar[i][1]; c=ar[i][2]; if(p[mp(min(a,b),max(a,b))]==0){ 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))]==0){ 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))]==0){ 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=0; for (int i=1;i<=n;i++){ if (vis[ar[i][0]]==1){ a=ar[i][1]; b=ar[i][2]; st=ar[i][0]; break; }else if (vis[ar[i][1]]==1){ a=ar[i][0]; b=ar[i][2]; st=ar[i][1]; break; }else if(vis[ar[i][2]]==1){ a=ar[i][0]; b=ar[i][1]; st=ar[i][2]; 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=1;i<=n-4;i++){ if (pp[mp(min(a,c),max(a,c))]!=0){ 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]==1){ 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]==1){ 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 0; } /* 5 4 1 2 4 3 2 2 3 5 * */
原文地址:https://www.cnblogs.com/bluefly-hrbust/p/11944924.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 别只会搜日志了,求你懂点原理吧
- Cypress系列(65)- 测试运行失败自动重试
- CentOS7下编译FFMPEG源代码
- Android 的 Presentation 双屏异显,遇到的问题总结
- 音视频相关开发库和资料
- Flink深入浅出: 应用部署与原理图解(v1.11)
- 用 Github Actions 在 K8S 中运行 CI 测试
- 线程池的拒绝策略
- 15 张图带你深入理解浮点数
- 用Python实现坦克大战游戏 | 干货贴
- hexo搭建个人网站博客完全教程
- 快速入门 Python 数据库操作
- Shell脚本管道符与重定向
- 偿还技术债(3)-ARouter源码详解
- 偿还技术债(4)-ARouter自己实现一个?