题解 P6892 [ICPC2014 WF]Baggage
时间:2021-08-02
本文章向大家介绍题解 P6892 [ICPC2014 WF]Baggage,主要包括题解 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__
原文地址:https://www.cnblogs.com/Varuxn/p/15089787.html
- Rafy 框架 - 使用 SqlTree 查询
- 详细讲解Quartz.NET
- android AlarmManager讲解
- Intent和PendingIntent的区别
- android程序崩溃后重启
- jQuery源码——.html()方法原理解析
- 【翻译】JavaScript内存泄露
- 【翻译】ES6生成器简介
- 浅谈事件冒泡
- Github page搭建博客使用自定义插件的方法
- 【翻译】JavaScript中5个值得被广泛使用的数组方法
- 【翻译】浏览器渲染Rendering那些事:repaint、reflow/relayout、restyle
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
- 《JQuery技术内幕》读书笔记——自调用匿名函数剖析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- types 和 @types 是什么?
- 一次绕过waf进行xss的经历
- opencv+python制作硬核七夕礼物
- 身份验证器是如何验证我们的身份?
- 谷歌开源NLP模型可视化工具LIT,模型训练不再「黑箱」
- MongoDB 案例:Document failed validation 错误
- 利用GoogleAppsScript自动回复短信实现保号
- 用php来查询graphql
- 利用树莓派的摄像模块实现“扫码枪”
- n ../../node_modules/@storybook/channels/dist/index.d.ts:25:9 - error TS1086: An accessor cannot ...
- 要不来重新认识Spring事务?三歪又学到了
- 读者问:学完SSM,该学什么呢?
- go-zero 微服务框架介绍
- redis-cli 未找到命令的一个解决方式
- 【每日一题】42. Trapping Rain Water