题解 P6892 [ICPC2014 WF]Baggage
解题思路
非常好的一道构造题。
在手动模拟几个样例(也许不止几个)之后呢。
就可以发现其实这些操作的开始以及最后几步是有相通之处的。
关于手动模拟的样例放在了文章末尾,需要的自取。
先考虑操作次数。
尝试探索答案的下界,设 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的更多相关文章
- 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 ...
- 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 ...
- 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 ...
- THUSC2017 Day1题解
THUSC2017 Day1题解 巧克力 题目描述 "人生就像一盒巧克力,你永远不知道吃到的下一块是什么味道." 明明收到了一大块巧克力,里面有若干小块,排成n行m列.每一小块都有 ...
- AtCoder Grand Contest 038 题解
传送门 这场表现的宛如一个\(zz\) \(A\) 先直接把前\(b\)行全写成\(1\),再把前\(a\)列取反就行 const int N=1005; char mp[N][N];int n,m, ...
- UVALive - 4787 ICPC WF 2010 Tracking Bio-bots【dp】
UVa 4787 WF题果然不一样,本来想暴力搜索,数据太大了,数组都开不了.看题解也不太懂,记录一下书上的题解,以后再看: 此题是给出N*M的格子,有些地方是墙,不可走.求所有不能只通过向上或者向右 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
随机推荐
- 用Java语言编写的迷宫小游戏软件
可查看本项目的github 源码链接,撒娇打滚求 star 哦~~ღ( ´・ᴗ・ ` )比心 本仓库代码是经过 eclipse 编译运行过的,一般情况下将本仓库代码下载下来之后,使用 eclipse ...
- Redis之内存优化
Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要.高效利用Redis内存首先需要理解Redis内存消耗在哪里,如 ...
- 温故知新,基于Nexus3和Docker搭建私有Docker Mirrors镜像库
前言 接着上一篇文章关于基于Nexus3和Docker搭建私有Nuget服务的探索,我们可以进一步利用Nexus3来创建一个私有的Docker镜像库满足内部需求. 仓库类型 hosted: 本地存储, ...
- 10、mysql增量恢复实战
10.1.实验数据: mysql> select * from test; +----+------+------+ | id | name | age | +----+------+----- ...
- keycloak文章汇总
keycloak文章汇总 Keycloak是一个致力于解决应用和服务身份验证与访问管理的开源工具.可以通过简单的配置达到保护应用和服务的目的. 用户管理 你的应用不需要开发登录模块,验证用户和保存用户 ...
- UVA 10887 set或hash
题意: 给出n个A串和m个B串,将这A串与B串连接(B接在A后面)可以生成n*m个AB串,求不同的AB串的数量 分析: set直接水过 #include <bits/stdc++.h> u ...
- css实现相框效果
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- CentOS-yum安装Redis(单点)
源文件安装(推荐安装) 在CentOS系统中,首先安装EPEL仓库,然后更新yum源: $ yum install epel-release -y $ yum update -y 然后安装Redis数 ...
- Redis:Java链接redis单节点千万级别数据 写入,读取 性能测试
本文是对Redis 单节点,针对不同的数据类型,做插入行测试. 数据总条数为:10058624 环境说明: Redis 未做任何优化, 单节点 (服务器上, 内存64G) ...
- Mybatis学习(8)动态sql语句
Mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件判断) 2. ...