解题思路

非常好的一道构造题。

在手动模拟几个样例(也许不止几个)之后呢。

就可以发现其实这些操作的开始以及最后几步是有相通之处的。

关于手动模拟的样例放在了文章末尾,需要的自取。

先考虑操作次数。

尝试探索答案的下界,设 x 为序列中相邻的相同元素对数。

那么初始为 \(x=0\),而最终 \(x=2(n-1)\).

且除了第一次操作每次操作最多可以使 x 加 2。

那么答案下界就是 n。

然后,通过手动模拟的样例可以发现:

除了三操作之外的所有操作,其实都可以通过递归从以前的状态转移过来。

接下来就是边界,我们发现其实每一次的递归都会把序列的长度缩小 8 。

因此,边界就是 \(\bmod\;8\) 之后的 4 种余数。

由于 3 的转移是不规则的,因此我们要将此种边界调整到 7。

其它

洛谷的评测机好像并不会告诉你这道题出错的地方。

我们可以自己写一个 Special_Judge 。

将 n 的大小以及自己的程序输出,放进去,看看最后的序列是否符合要求。

当然我也写了一份,放在后面

code

AC 代码

#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define f() cout<<"Pass"<<endl
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int N=110;
int n;
void print(int x,int y) {printf("%lld to %lld\n",x,y);}
void Judge(int l)
{
print(l+1,l-2);
print(l+4,l+1);
print(l+2,l-4);
}
void solve(int l,int r)
{
if(r-l+1<=2) return ;
if(r-l+1==10)
{
print(r-2,l-2);
print(l+2,r-2);
print(r-4,l+2);
print(l-1,r-4);
print(r-1,l-1);
return ;
}
if(r-l+1==12)
{
print(r-2,l-2);
print(r-5,r-2);
print(l+1,r-5);
print(r-6,l+1);
print(l-1,r-6);
print(r-1,l-1);
return ;
}
if(r-l+1==14)
{
print(l+7,l-2);
print(l+4,l+7);
print(l+11,l+4);
print(l+2,l+11);
print(l+8,l+2);
print(l-1,l+8);
print(l+12,l-1);
return ;
}
print(r-2,l-2);
print(l+2,r-2);
solve(l+4,r-4);
print(l-1,r-5);
print(r-1,l-1);
}
signed main()
{
n=read();
if(n==3) Judge(1);
else solve(1,2*n);
return 0;
}

Special_Judge

#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define f() cout<<"Pass"<<endl
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int n;
char ch[500];
void move(int y,int x)
{
ch[x]=ch[y];
ch[x+1]=ch[y+1];
ch[y+1]=ch[y]='_';
}
void print()
{
for(int j=2*n-1;j<=4*n;j++)
cout<<ch[j];
cout<<'\n';
}
signed main()
{
n=read();
fill(ch+1,ch+4*n+1,'_');
for(int i=2*n+1;i<=4*n;i++)
if(i&1) ch[i]='B';
else ch[i]='A';
for(int i=1,l,r;i<=n;i++)
{
l=read();
r=read();
print();
move(l+2*n,r+2*n);
}
print();
return 0;
}

样例

  • n=3
__BABABA
ABB__ABA
ABBBAA__
ABBB____
  • n=4
__BABABABA
ABBABAB__A
ABBA__BBAA
A__ABBBBAA
AAAABBBB__
  • n=5
__BABABABABA
ABBABABAB__A
ABBA__BABBAA
ABBAABB__BAA
A__AABBBBBAA
AAAAABBBBB__
  • n=6
__BABABABABABA
ABBABABABAB__A
ABBABABA__BBAA
ABB__ABAABBBAA
ABBAAAB__BBBAA
A__AAABBBBBBAA
AAAAAABBBBBB__
  • n=7
__BABABABABABABA
ABBABABAB__ABABA
ABBABA__BBAABABA
ABBABAABBBAAB__A
ABBA__ABBBAABBAA
ABBAAAABBB__BBAA
A__AAAABBBBBBBAA
AAAAAAABBBBBBB__

题解 P6892 [ICPC2014 WF]Baggage的更多相关文章

  1. UVA1025---A Spy in the Metro(DP)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=35913 Secret agent Maria was sent to Alg ...

  2. CF1578I Interactive Rays:ICPC WF Moscow Invitational Contest I 题解

    题意简述:在平面上有一个坐标 \((x_c,y_c)\) 和半径 \(r\) 都是整数的圆 \((1\leq r_c\leq \sqrt{x_c^2+y_c^2}-1)\),你可以询问不超过 \(60 ...

  3. LuoguP6904 [ICPC2015 WF]Amalgamated Artichokes 题解

    Content 已知常数 \(p,a,b,c,d\),我们知道,第 \(k\) 天的股价公式为 \(price_k=p\times(\sin(a\times k+b)+\cos(c\times k+d ...

  4. THUSC2017 Day1题解

    THUSC2017 Day1题解 巧克力 题目描述 "人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道." 明明收到了一大块巧克力,里面有若干小块,排成n行m列.每一小块都有 ...

  5. AtCoder Grand Contest 038 题解

    传送门 这场表现的宛如一个\(zz\) \(A\) 先直接把前\(b\)行全写成\(1\),再把前\(a\)列取反就行 const int N=1005; char mp[N][N];int n,m, ...

  6. UVALive - 4787 ICPC WF 2010 Tracking Bio-bots【dp】

    UVa 4787 WF题果然不一样,本来想暴力搜索,数据太大了,数组都开不了.看题解也不太懂,记录一下书上的题解,以后再看: 此题是给出N*M的格子,有些地方是墙,不可走.求所有不能只通过向上或者向右 ...

  7. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  8. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  9. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

随机推荐

  1. 合宙模块LUA相关资料汇总

    1. 目录 1. 目录 [2. LUA二次开发](#2. LUA二次开发) 2.1 [新手教程](#2.1 新手教程) 2.2 [进阶教程](#2.2 进阶教程) 2.3 [LUA开发环境](#2.3 ...

  2. 题解 P3605 [USACO17JAN]Promotion Counting P

    分块\(yyds\) ----关于线段树合并的题我用分块过掉这件事 题目传送门 先说正解 正解当然是线段树合并等一类做法了 至于解析...出门右转题解区第一篇 (就是他让我看不懂,然后用分块打的\(Q ...

  3. 【模板】Noi-Linux 下的一些配置

    Noi-Linux 下的一些配置(C++) vim 编程 来自远古的编程神器 针对网上其他博客的配置做了简化 配置 set t_Co=256 //开启256色模式 默认是16色 让你的vim更好看 s ...

  4. 不会 Web 开发,也能让数据“动”起来的开源项目!

    本文面向有 Python 基础的小伙伴,有 Web 基础的更好 作者:HelloGitHub-吱吱 这里是 HelloGitHub 推出的<讲解开源项目>系列,今天要向小伙伴们介绍的是一个 ...

  5. 关于win10 samba访问提示用户名和密码错误的原因

    排除掉linux上的配置错误,只需要做到以下两步就可以了: 1.win10系统运行secpol.msc 打开本地安全策略 2.安全策略->本地策略->安全选项 3.右侧找到 网络安全:LA ...

  6. Android开发问题之Installation failed due to invalid URI!

    真机调试遇到以下问题: [2017-07-20 13:43:53 - VCL02PANEL] Installation failed due to invalid URI![2017-07-20 13 ...

  7. 详解 DNS 解析

    背景 前面讲了域名.IP,那么还缺少一个主角,就是 DNS 这些都是网络中最最最基础的,也是最最最重要的概念,很有必要深入学习下 所有素材均来自:https://www.bilibili.com/vi ...

  8. 39、升级linux的内核

    39.1.什么是linux系统内核: 操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件.一个计算机 系统是一个硬件和软件的共生体,它们互相依赖,不可分割.计算机的硬件,含有外 ...

  9. 浅析富文本编辑器框架Slate.js

    浅析富文本编辑器框架Slate.js 本文不是关于Slate.js使用入门的文章,如果还不了解该框架,建议先阅读下官方的文档:Slate官网文档 关于Slate的一些特性 不同于其他编辑器类的库,Sl ...

  10. Docker学不会?不妨看看这篇文章

    大家好,我是辰哥! 上一篇文章(2300+字!在不同系统上安装Docker!)教大家如何在系统上安装docker,今天咱们来学习docker的基本使用. 辰哥将在本文里详细介绍docker的各种使用命 ...