news 2026/6/10 0:27:07

P14972 『GTOI - 2C』Fliping题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P14972 『GTOI - 2C』Fliping题解

P14972 『GTOI - 2C』Fliping

题目描述

给出一个1 ∼ n 1\sim n1n的排列a aa,请问能否通过不超过3000 30003000次操作使数组a aa单调递增

对于每次操作,你可以翻转一个长度至少3 \bm33的区间。

其中,“翻转”指的是:例如数组a = { 5 , 4 , 3 , 2 , 1 } a = \{5,4,3,2,1\}a={5,4,3,2,1},翻转区间是[ 2 , 4 ] [2,4][2,4]的话,结果是a = { 5 , 2 , 3 , 4 , 1 } a = \{5,2,3,4,1\}a={5,2,3,4,1}

如果可以,输出一种构造方案,具体请参考【输出格式】

如果不可以,输出-1

输入格式

输入共两行。

第一行,一个正整数n nn

第二行,一个1 ∼ n 1\sim n1n的排列a aa

输出格式

如果存在构造方案:

  • 输出一个非负整数m mm表示总共需要操作的次数。
  • 然后输出m mm行,每行两个正整数l , r l,rl,r表示每次翻转的区间[ l , r ] [l,r][l,r]

本题使用 Special Judge ,若有多组构造方案,任意输出一组即可。

如果不存在构造方案,输出-1即可。

输入输出样例 #1

输入 #1

5 2 5 4 3 1

输出 #1

3 1 4 1 3 1 5

说明/提示

【数据范围】

本题采用捆绑测试。

对于100 % 100\%100%的数据,保证1 ≤ n ≤ 2000 1\leq n\leq 20001n2000{ a } \{a\}{a}1 ∼ n 1\sim n1n的排列。

Subtask \text{Subtask}Subtaskn ≤ n \leqn特殊性质分数
1 117 7720 2020
2 2250 5050^10 1010
3 331000 10001000^10 1010
4 441500 15001500^10 1010
5 552000 20002000保证a i a_iai随机生成10 1010
6 66^保证a i ≡ i ( m o d 2 ) a_i\equiv i\pmod 2aii(mod2)20 2020
7 77^20 2020

思路

直接每次行则立刻转,否则转最后再转即可,然后<=5时特判一下。

代码见下

#include<bits/stdc++.h>usingnamespacestd;longlongn,a[2005];structone{longlongl,r;};vector<one>v;intmain(){cin>>n;for(inti=1;i<=n;i++){cin>>a[i];}for(inti=1,k;i<=n;i++){for(intj=i;j<=n;j++){if(a[j]==i){k=j;break;}}if(i==k){continue;}if(k-i>=2){v.push_back({i,k});for(intj=i;j<=(i+k)/2;j++){swap(a[j],a[i+k-j]);}}elseif(n-k>=2){v.push_back({k,n});for(intj=k;j<=(k+n)/2;j++){swap(a[j],a[k+n-j]);}v.push_back({i,n});for(intj=i;j<=(i+n)/2;j++){swap(a[j],a[i+n-j]);}}else{if(k==n){if(n<=4){cout<<-1<<endl;return0;}else{v.push_back({n-4,n-1});v.push_back({n-3,n-1});v.push_back({n-4,n});v.push_back({n-4,n-1});cout<<v.size()<<endl;for(intj=0;j<v.size();j++){cout<<v[j].l<<" "<<v[j].r<<endl;}return0;}}else{if(a[n]==n){if(n<=5){cout<<-1<<endl;return0;}else{n--;v.push_back({n-4,n-1});v.push_back({n-3,n-1});v.push_back({n-4,n});v.push_back({n-4,n-1});cout<<v.size()<<endl;for(intj=0;j<v.size();j++){cout<<v[j].l<<" "<<v[j].r<<endl;}return0;}}else{if(n<=5){cout<<-1<<endl;return0;}else{v.push_back({n-2,n});n--;v.push_back({n-4,n-1});v.push_back({n-3,n-1});v.push_back({n-4,n});v.push_back({n-4,n-1});cout<<v.size()<<endl;for(intj=0;j<v.size();j++){cout<<v[j].l<<" "<<v[j].r<<endl;}return0;}}}}}cout<<v.size()<<endl;for(intj=0;j<v.size();j++){cout<<v[j].l<<" "<<v[j].r<<endl;}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 7:08:03

提升响应速度:u8g2刷新策略深度剖析

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然如资深嵌入式工程师面对面分享&#xff1b; ✅ 摒弃模板化标题与“总-分-总”结构&#xff0c;以真实开发痛点为起点&#xff0c;…

作者头像 李华
网站建设 2026/6/6 11:48:23

WAN2.2文生视频新体验:中文提示词输入,轻松创作高质量内容

WAN2.2文生视频新体验&#xff1a;中文提示词输入&#xff0c;轻松创作高质量内容 1. 为什么这次升级值得你立刻试试&#xff1f; 你有没有过这样的经历&#xff1a;想用AI生成一段短视频&#xff0c;却卡在第一步——英文提示词写得磕磕绊绊&#xff0c;反复调试“a cinemat…

作者头像 李华
网站建设 2026/6/9 17:25:09

麦橘超然步数设置建议,平衡速度与质量

麦橘超然步数设置建议&#xff0c;平衡速度与质量 在使用“麦橘超然”&#xff08;MajicFLUX&#xff09;进行AI图像生成时&#xff0c;你是否遇到过这样的困惑&#xff1a; 输入了精心打磨的提示词&#xff0c;却生成出细节模糊、结构松散的画面&#xff1f; 或者明明设备性能…

作者头像 李华
网站建设 2026/6/6 11:26:19

跨语言访谈整理助手,中英日韩自动切换识别

跨语言访谈整理助手&#xff0c;中英日韩自动切换识别 在做跨国市场调研、国际客户访谈或跨文化内容创作时&#xff0c;你是否经历过这些场景&#xff1a; 一段30分钟的日语访谈录音&#xff0c;手动听写耗时4小时&#xff0c;还常漏掉语气词和情绪变化中英混杂的会议录音里&…

作者头像 李华
网站建设 2026/6/5 20:13:16

鹰眼目标检测实战案例:YOLOv8多场景物体识别详细步骤

鹰眼目标检测实战案例&#xff1a;YOLOv8多场景物体识别详细步骤 1. 什么是“鹰眼”&#xff1f;——从概念到落地的直观理解 你有没有想过&#xff0c;如果给一台普通电脑装上一双“眼睛”&#xff0c;它能不能像人一样&#xff0c;一眼扫过去就认出照片里有几辆车、几个人、…

作者头像 李华
网站建设 2026/6/6 11:51:06

多核MCU下Keil调试JTAG链路连接策略完整指南

以下是对您提供的技术博文进行 深度润色与结构重构后的专业级技术文章 。全文已彻底去除AI生成痕迹&#xff0c;采用真实嵌入式工程师口吻写作&#xff0c;逻辑层层递进、语言精炼有力、案例具体可感&#xff0c;并融合大量一线调试经验与底层原理洞察。所有术语、寄存器地址…

作者头像 李华