题意 :

  • 对于一个长度为n的排列和一个空序列ans,每次取当前最左边或者最右边中最小的值,如果取的是最左边,插入序列ans的最左边,然后在排列中删除这个数,如果取的是最右边,插入最右边,删除
  • 现在给出ans序列,问是否存在排列使得操作后的结果是ans,输出任意方案

思路 :

  • 首先,最后插入的数字一定是排列中最大的数字,也就是它一定在ans的左/右
  • 我们检测ans的首尾是否有一个n,如果不存在一定无解
  • 如果存在 :
  • 1.ans[1] == n,我们把ans[1]放到原数组的最左边,由于它是最大的,在每一次的操作中,它都可以让另一个数被取走,它本身最后才被取走,由于构造出来的结果是最外层的先被比较然后放入新的序列中,因此,将[2,n][2,n][2,n]逆序即可
  • 2.ans[n] == n,对于[1,n−1][1,n-1][1,n−1]的数字,它们同样是逆序存储的
  • reverse第二个参数是)而不是]的
  • return cout << xxx << endl, void();,就不用换行return了
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <unordered_set>
#include <math.h>
using namespace std;typedef long long ll;
typedef pair<int, int> PII;#define endl '\n'
#define fi first
#define se second
#define push_back
#define rep(i, l, r) for (ll i = l; i <= r; i ++ )const int N = 2e5 + 10;int n, a[N];void solve()
{cin >> n;for (int i = 1; i <= n; i ++ ) cin >> a[i];if (a[1] != n && a[n] != n) return cout << -1 << endl, void();if (a[1] == n) reverse(a + 2, a + n + 1);else if (a[n] == n) reverse(a + 1, a + n);for (int i = 1; i <= n; i ++ ) cout << a[i] << " \n"[i == n];
}int main()
{cin.tie(nullptr) -> sync_with_stdio(false);int _;cin >> _;while (_ -- )solve();return 0;
}

Polycarp Recovers the Permutation 构造(1000)相关推荐

  1. CodeForces - 287C Lucky Permutation(构造)

    题目链接:点击查看 题目大意:构造一个合法的排列,满足 ppi=n−i+1p_{p_{i}}=n-i+1ppi​​=n−i+1 题目分析:因为第四个样例的存在降低了本题的难度,不然感觉还是有点难度的一 ...

  2. Permutation(构造+思维)

    A permutation p is an ordered group of numbers p1,   p2,   ...,   pn, consisting of ndistinct positi ...

  3. K Co-prime Permutation 构造,gcd,互质(2020.12.南京)

    题意 : 求构造一个n的排列,满足其中恰好k个元素与下标互质,如果不能则输出-1 思路 : 让前k个与下标偏移1,后面的都与下标相同即可 当且仅当k=0时,无解,输出-1 #include <i ...

  4. Special Permutation 构造,min_element,贪心(900)

    题意 : 构造一个n(偶数)的全排列,使得全排列的前半部分最小值等于a,后半部分最大值等于b,如果不能构造,则输出-1 思路一 : 直接构造,将a放最前,b放最后,中间从大到小放,然后构造后判断是否合 ...

  5. Codeforces 482 - Diverse Permutation 构造题

    这是一道蛮基础的构造题. - k         +(k - 1)      -(k - 2) 1 + k ,    1 ,         k ,             2,    ....... ...

  6. codeforces C. Diverse Permutation(构造)

    题意:1...n 的全排列中 p1, p2, p3....pn中,找到至少有k个 |p1-p2| , |p2-p3|, ...|pn-1 - pn| 互不相同的元素! 思路: 保证相邻的两个数的差值的 ...

  7. Codeforces.612E.Square Root of Permutation(构造)

    题目链接 \(Description\) 给定一个\(n\)的排列\(p_i\),求一个排列\(q_i\),使得对于任意\(1\leq i\leq n\),\(q_{q_i}=p_i\).无解输出\( ...

  8. CF756div3 vp

    又被薄纱了,rk就不放了,好丢人QwQ Dashboard - Codeforces Round 756 (Div. 3) - Codeforces A. Make Even 小分类讨论 题意: 给定 ...

  9. Codeforces Round #756 (Div. 3)

    Codeforces Round #756 (Div. 3) A. Make Even 思路:如果末尾是偶数,不需要操作:如果开头是偶数,一次操作,即全翻转:如果开头和末尾都是 奇数,判断里面是否有偶 ...

最新文章

  1. 正则表达式校验IP地址
  2. 初识HTML和WEB标准
  3. HDU-2149(博弈)
  4. C++ 转换构造函数
  5. Java工作笔记-apache-tomcat-8.5.49及geoserver-2.7.5搭建
  6. 杨超越吧编程大赛;拼多多刷单?苹果新员工一半没本科学历 | 极客头条
  7. 【luogu1018】 乘积最大 [区间dp+高精][noip2000]
  8. pycharm shortcuts
  9. mysql数据库的笔试题_MySQL数据库常见面试题
  10. 数值计算原理_JavaScript策略设计时数值计算精度问题解决方案
  11. 我有你没有游戏例子100_50米的决赛圈里面藏着100个人?光子:知道什么叫质量局了吧!...
  12. 功能丰富的 Perl: 一行程序
  13. 【边喝caffee边Caffe 】(三) Check failed: registry.count(t ype) == 1 (0 vs. 1) Unknown layer type
  14. 浅谈现代钢琴踏板的原理以及在三角钢琴和立式钢琴上的差异
  15. html embed页面无法播放视频,embed标签什么意思 手机无法播放网页上embed标签的视频...
  16. win11输入法关闭简繁切换热键,解决webstorm全局查询按键失效
  17. linux防火墙黑白名单,iptables详解(9):iptables的黑白名单机制
  18. 看院线电影就用移动电影院V2.0App
  19. IDEA报错:Failed to obtain JDBC ConnectionCannot create PoolableConnectionFactory
  20. android+微信语音,android 仿微信按住语音说话(语音聊天)源码下载

热门文章

  1. 11、Power Query-透视列的解析
  2. 成本费用跨年取得发票的财务、税务处理
  3. 租房还是买房结婚?大数据告诉你年轻人的真实想法
  4. java开发前的准备工作_三、开发java程序前的准备工作
  5. 20个html标签及其作用,请写出至少20个html标签,并说说各个标签的功能或作用。...
  6. oracle用dba登陆怎么登,以SQLDBA身份登录isqlplus
  7. 嵌入式c语言为什么变量定义在前面,嵌入式C语言数据类型和变量详解
  8. 用python读取股票价格_使用Python写一个量化股票提醒系统
  9. java 存储卫星定位数据_gps卫星信号模拟器的特点介绍
  10. [javaweb] servlet-session 会话跟踪技术 与 session保存作用域 (三)