ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【洛谷6892】[ICPC2014 WF] Baggage(构造)

2021-05-26 19:32:57  阅读:196  来源: 互联网

标签:case WF ICPC2014 洛谷 int Move break ++ define


点此看题面

  • 一张无限长的格子纸条,其中\(1\sim 2n\)位奇数位填着"B",偶数位填着"A",剩余位没有字母。
  • 一次移动操作可以将连续两个有字母的格子中的字母剪切到连续两个没有字母的格子中。
  • 要求构造一组移动步数最少方案。
  • \(3\le n\le100\)

构造题

首先,样例给了我们很明显的提示:最少的移动步数就是\(n\)。

所以说,关键在于如何构造。

我们发现一开始肯定可以进行若干次操作,每次先将最右边的一个"AB"移到左边,再将最左边的一个"BA"移到右边。

这样不断搞下去最终中间会出现一段无法如此操作的部分。

然后又发现需要根据\(n\)模\(4\)的余数分成\(4\)类情况讨论,其中\(n\%4=0/1\)的情况样例中有了,而且本身也非常简单。

而\(n\%4=2/3\)的情况关键在于手玩出\(n=6\)和\(n=7\)的情况。

注意,\(n\%4=3\)的时候并不是在\(n=3\)的情况基础上推得的(当然由于可能存在\(n=3\),这一部分的手玩也是不可避免的),而是由\(n=7\)推得的!所以不要像我那样试着用\(n=3\)来推\(n=7\)直接懵了\(1\)个小时。。。

处理完中间部分后,不同情况的操作又变得统一了起来,每次先将左边最靠右的一个"BB"移到右边,再将右边最靠左的一个"AA"移到左边。

具体实现详见代码吧,因为具体的构造过程也很难讲清楚。

代码:\(O(n)\)

#include<bits/stdc++.h>
#define Tp template<typename Ty>
#define Ts template<typename Ty,typename... Ar>
#define Reg register
#define RI Reg int
#define Con const
#define CI Con int&
#define I inline
#define W while
#define Move(x) (printf("%d to %d\n",x,z),z=x)//将x移到空位上
using namespace std;
int n; 
int main()
{
	RI i,x,y,z=-1;if(scanf("%d",&n),n==3) return Move(2),Move(5),puts("3 to -3"),0;//特判n=3,由于要用到-3位置,所以无法推广
	for(i=1,x=2*n-2,y=3;i<=n/4-(n%4>=2);++i) Move(x),x-=4,Move(y),y+=4;//通用的开始
	switch(n%4)//按余数分类讨论
	{
		case 0:y=x-2,x+=5;break;case 1:Move(x+2),y=x-4,x+=5;break;
		case 2:Move(x),Move(x-3),Move(x-8),Move(x-4),y=x-10,++x;break; 
		case 3:Move(x-4),Move(x-7),Move(x),Move(x-9),Move(x-3),y=x-12,++x;break;
	}
	for(i=1;i<=n/4;++i) Move(y),y-=4,Move(x),x+=4;return 0;//通用的结束
}

标签:case,WF,ICPC2014,洛谷,int,Move,break,++,define
来源: https://www.cnblogs.com/chenxiaoran666/p/CF6892.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有