题解 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 ...
随机推荐
- 代码生成器:IDEA 强大的 Live Templates
前言 Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等.对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能. ...
- 【题解】Luogu p3478 [POI2008]STA-Station 动态规划
题目描述 给出一个$N$个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入输出格式 输入格式 第一行一个数$n$,表示树上共有$n$个点接下来$n-1$行,表示$n-1$条边;每行 ...
- Golang学习(用代码来学习) - 第三篇
type Books struct { title string author string subject string id int } /** 结构体的学习 */ func struct_tes ...
- 1、linux集群服务器规划
- 【luogu P3807】【模板】卢卡斯定理/Lucas 定理(含 Lucas 定理证明)
[模板]卢卡斯定理/Lucas 定理 题目链接:luogu P3807 题目大意 求 C(n,n+m)%p 的值. p 保证是质数. 思路 Lucas 定理内容 对于非负整数 \(n\),\(m\), ...
- 【PC桌面软件的末日,手机移动端App称王】写在windows11支持安卓,macOS支持ios,龙芯支持x86和arm指令翻译
面对这场突如其来的变革,作为软件开发者,应该如何选择自己今后的发展方向?桌面软件开发领域还有前景吗? 起源 自从苹果发布m1处理器,让自家Mac支持IOS移动端app运行之后,彻底打破了移动端app和 ...
- iOS如何提升,首先得知自己的处境!(欢迎评论留言)
聊聊行情?为什么总有人在乎旁人的看法而忽略自己的初衷?虽然iOS开发市场说不上好但也绝不算坏,想没想过那些煽风点火说iOS不行的人在做什么?真的转行从头开始?错.大错特错!在劝退你的同时他们会默默的学 ...
- Java并发之ReentrantReadWriteLock源码解析(二)
先前,笔者和大家一起了解了ReentrantReadWriteLock的写锁实现,其实写锁本身实现的逻辑很少,基本上还是复用AQS内部的等待队列思想.下面,我们来看看ReentrantReadWrit ...
- centos 8 安装 PostgreSQL-10
下载 PostgreSQL-10软件包 官网地址:https://www.postgresql.org/ 选择自己的版本 此处已postgresql-10.16-2-linux-x64.run安装为例 ...
- 用java实现斐波那契数列
斐波那契数列源于数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入的计算问题.假设某种兔子兔子,出生第一个月变成大兔子,大兔子再过一个月能生下一对小兔子,且一年 ...