正解:构造

解题报告:

传送门!

umm这题就是很思维的?就是想到了就A了想不到就做不出来,然而我也只能是做到理解不知道怎么想出来,,,感觉构造题什么的就很真诚,一点套路也没有,所以像我这种没有脑子只会投机取巧找规律的弱鸡就完全想不到QAQ撑死也不够是能理解解法而已QAQ希望多做一点这类的题目能有帮助趴QAQ

首先嗦嗦这题最基本的变化,就是,假如我现在已经确定了一段[1,i]了,现在要把第i+1放到第i个后面去,假如是酱婶的:balabala 1 2 ... i balabala i+1 balabala(事实上最前面那个balabala是不可能存在的存在也很容易消掉的,但是不要在意这种细节反正没有影响×只是代码有点儿区别注意下就是了qwq

显然的是当[1,i]后面乜有数了并且第i+1个在第一个的时候就能用i个操作a于是就能得到[1,i+1]balabala了,然后一直这么做做做做下去就欧克了

那怎么实现呢,首先用一堆a把第i+1个放到第一个,这儿不难?然后考虑怎么做到把[1,i]之后那些杂七杂八的数都移到前面去并且保持i+1在第一个?其实比较容易想到?就用俩A然后i+1就到了第三位这时候再用个B,i+1就又到第一个了

然后注意一下的是如果到最后i+1在第一个,就直接做;如果在第三个,用一次B然后直接做;如果在第二个呢?当然也不难咯,用两次B就可以了

另外一个需要注意的地方是当解决得差不多了只剩最后两个的时候,如果出现了n,n-1,1,2,...,n-2的情况,按照我们之前的思路,就是用两次B然后就能让n-1到第一位然后就这么顺利地做下去辽

但是!显然这个情况下就不欧克了鸭QAQ因为n被夹到[1,n-2]这个区间里去了就废了

所以考虑换一种变化方式

就是,直接假装n-1在第一个时候的样子移动[1,n-2],不过是当第n个在第三个的时候使用B

这样最后的效果应该就是变成酱婶的:n,1,2,...,n-1

大概能get到?

然后再走n-1次A就欧克了!

然后如果在刚刚说的情况中,n是奇数,辣就是说n-2是奇数,就无法每次都移动俩,所以就无解输出NIE

over!

umm然后放个代码QwQ

#include<bits/stdc++.h>
using namespace std;
#define rp(i,x,y) for(register int i=x;i<=y;++i) const int N=;
int n,a[N],b[N],op[N*N],len[N*N],ans,flag; inline int read()
{
char ch=getchar();int x=;bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')ch=getchar(),y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
void mva(int l){rp(i,,n)b[(i+l)%n]=a[i];b[n]=b[];rp(i,,n)a[i]=b[i];}
void mvb(int &x,int &y,int &z){int tmp=z;z=y,y=x,x=tmp;}
void fd(int i,int &x){rp(j,,n)if(a[j]==i){x=j;return;}}
void final(int x)
{
int w=n+,mva=(n-x)&;
for(int i=x+mva;a[i+]!=;i--)b[--w]=a[i];w=;rp(i,x++mva,n)b[++w]=a[i];
for(int i=;a[i]!=;i++)b[++w]=a[i];rp(i,,n)a[i]=b[i];
if(!mva)return;
rp(i,,n-)b[i+]=a[i];
b[]=a[];b[]=a[],b[]=a[n];
rp(i,,n)a[i]=b[i];
}
void ad(int l,int k)
{
if(op[ans]==k)len[ans]+=l;else len[++ans]=l,op[ans]=k;
if(op[ans]==)len[ans]%=n;else len[ans]%=;
if(!len[ans])--ans;
}
void printans()
{
if(flag){printf("NIE\n");return;}
printf("%d\n",ans);
rp(i,,ans)
{
printf("%d%c",len[i],op[i]+'a'-);
if(i!=ans)printf(" ");
}
}
void dolast()
{
int x;fd(,x);int tt=(n-x+)%n;
if(tt)mva(tt),ad(tt,);
if(a[n-]==n-)return;
if(n&){flag=;return;}
mva(),ad(,);
while(a[n]!=n-){ad(,);mva();ad(,);mvb(a[],a[],a[]);}
ad(n-,);mva(n-);
}
int main()
{
n=read();ans=;flag=;
rp(i,,n)a[i]=read();
rp(i,,n-)
{
int x;fd(i,x);if(x==i)continue;int tt=n-x+;
mva(tt);ad(tt,);fd(i-,x);
rp(k,,(n-x)>>)ad(,),ad(,);
if((n-x)&)ad(,),ad(,);
ad(i-,);final(x);mva(i-);
}
dolast();printans();
}

好难打啊,,,死亡QAQ

洛谷P3516 PRZ-Shift [POI2011] 构造的更多相关文章

  1. C 洛谷 P3599 Koishi Loves Construction [构造 打表观察]

    题目描述 Koishi决定走出幻想乡成为数学大师! Flandre听说她数学学的很好,就给Koishi出了这样一道构造题: Task1:试判断能否构造并构造一个长度为的的排列,满足其个前缀和在模的意义 ...

  2. 洛谷P1073 Tarjan + 拓扑排序 // 构造分层图

    https://www.luogu.org/problemnew/show/P1073 C国有 n n个大城市和 mm 条道路,每条道路连接这 nn个城市中的某两个城市.任意两个城市之间最多只有一条道 ...

  3. 洛谷P3599 Koishi Loves Construction 构造

    正解:构造 解题报告: 传送门! 这题俩问嘛,就分成两个问题港QwQ 就按顺序趴,先港第一问QwQ 首先要发现,n在膜n意义下就是0嘛 那作为前缀和的话显然它就只能放在第一个 然后再想下,发现,如果n ...

  4. 洛谷P2325王室联邦 SCOI2005 构造+树上分块

    正解:构造 解题报告: 照例先放传送门 umm其实我jio得这题应该在教树上莫队的时候港,应该是用来帮助理解树上莫队的分块方式的 然而这题是在学了树上分块之后再遇到的?就显得没那么难了吼 然后就随便说 ...

  5. 洛谷 P3521 ROT-Tree Rotations [POI2011] 线段树

    正解:线段树合并 解题报告: 传送门! 今天学了下线段树合并,,,感觉线段树相关的应用什么的还是挺有趣的,今天晚上可能会整理一下QAQ? 然后直接看这道题 现在考虑对一个节点nw,现在已经分别处理出它 ...

  6. [洛谷P3527] [POI2011]MET-Meteors

    洛谷题目链接:[POI2011]MET-Meteors 题意翻译 Byteotian Interstellar Union有N个成员国.现在它发现了一颗新的星球,这颗星球的轨道被分为M份(第M份和第1 ...

  7. 洛谷P3513 [POI2011]KON-Conspiracy

    洛谷P3513 [POI2011]KON-Conspiracy 题目描述 Byteotia的领土被占领了,国王Byteasar正在打算组织秘密抵抗运动. 国王需要选一些人来进行这场运动,而这些人被分为 ...

  8. BZOJ2212或洛谷3521 [POI2011]ROT-Tree Rotations

    BZOJ原题链接 洛谷原题链接 线段树合并裸题. 因为交换子树只会对子树内部的逆序对产生影响,所以我们计算交换前的逆序对个数和交换后的个数,取\(\min\)即可. 对每个叶子节点建一棵动态开点线段树 ...

  9. 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)

    洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 ...

随机推荐

  1. SQL DDL 数据定义语句

    前言 DDL(Data Definition Language)语句:数据定义语句,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象.常用的语句关键字主要包括 create.drop.al ...

  2. Python的虚拟机安装已经如何配置Scrapy for Mac

    时间:2018年2月21日 因为时间问题,以下笔记就粗略记录.仅作为个人笔记为用 安装virtualenv和virtualenvwrapper 如何安装的细节下面这篇也有介绍,包括如何使用切换虚拟机也 ...

  3. stackoverflow愚人节彩蛋效果

    效果如图所示: index.js /*! * Fairy Dust Cursor.js * - 90's cursors collection * -- https://github.com/thol ...

  4. 【CFD之道】2018年原创文章汇总

    以下是公众号CFD之道2018年的全部原创文章,共计210篇. 1 Fluent验证案例[60篇] Fluent验证案例02:通过均匀热通量管道层流流动 Fluent验证案例03:管道中湍流流动压降计 ...

  5. Asp.Net WebApi接口返回值IHttpActionResult

    WebApi是微软在VS2012 MVC4版本中绑定发行的,webapi2.0同mvc5发行的 webapi一共有以下接口返回值 1.void无返回值2.IHttpActionResult Json( ...

  6. Java编程的逻辑 (93) - 函数式数据处理 (下)

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  7. win10下安装基于caffe的 Faster-Rcnn

    安装教程   本篇博客将会教会你在Windows下配置py-faster-rcnn,请细心仔细阅读.说白了,Windows下配置这些东西就是一个坑. 安装配置Anaconda   由于py-faste ...

  8. Mysql推荐使用规范(转)

    一:基础规范 1.使用InnoDB存储引擎 支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 2.推荐使用utf8mb4字符集 无需转码,无乱码风险, 支持emoji表情以及部 ...

  9. 新唐N32905U1DN开发教程:MDK环境下工程搭建(官方提供的固件库)(转)

    前言:新唐N32905U1DN单片机不支持用户将程序烧录到内部FLASH,必须外挂FLASH存储用户程序,可以是SPI FLASH.NAND FLASH.SD卡.用户采用裸机开发的方式可使用官方提供的 ...

  10. Python实现代码统计工具——终极加速篇

    Python实现代码统计工具--终极加速篇 声明 本文对于先前系列文章中实现的C/Python代码统计工具(CPLineCounter),通过C扩展接口重写核心算法加以优化,并与网上常见的统计工具做对 ...