bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)

本文介绍了一个名为“立方体大作战”的游戏算法实现。通过贪心策略和树状数组来解决玩家如何以最少步骤消除所有方块的问题。文章详细解释了算法思路并提供了完整的代码实现。

1106: [POI2007]立方体大作战tet

Time Limit: 10 Sec   Memory Limit: 162 MB
Submit: 785   Solved: 574
[ Submit][ Status][ Discuss]

Description

  一个叫做立方体大作战的游戏风靡整个Byteotia。这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置。这些元素拥有n个不同的编号,每个编号正好有两个元素。玩家每次可以交换两个相邻的元素。如果在交换之后,两个相邻的元素编号相同,则将他们都从栈中移除,所有在他们上面的元素都会掉落下来并且可以导致连锁反应。玩家的目标是用最少的步数将方块全部消除。

Input

  第一行包含一个正整数n(1<=n<=50000)。接下来2n行每行一个数ai,从上到下描述整个栈,保证每个数出现且仅只出现两次(1<=ai<=n)。初始时,没有两个相同元素相邻。并且保证所有数据都能在1000000步以内出解。

Output

  第一行包含一个数m,表示最少的步数。

Sample Input

样例输入1
5
5 2 3 1 4 1 4 3 5 2
样例输入2
3
1 2 3 1 2 3

Sample Output

样例输出1
2
样例输出2
3

知道思路这题是非常好写的

思路:

贪心,遍历每个数,如果这个数字已经出现过了,答案加上这两个数之间其它数字的个数

并将这个数字从数列中删去就行了

例如:

1 2 3 2 3 1

当遍历到第4个数'2'时,中间有个3,ans++

当遍历到第5个数'3'时,中间没有数字(有个2但已经被删了)

当遍历到第6个数'1'时,中间也没有数字(2和3都被删了)

所以最后答案是1

上面的步骤同时也是证明:删除任意一对数时,一定要保证中间已经没有相同的数字了才是最优解

过程可以用树状数组维护

#include<stdio.h>
#define LL long long
int n, flag[50005], tre[100005];
void Update(int k, int x)
{
	while(k<=n*2)
	{
		tre[k] += x;
		k += k&-k;
	}
}
int Query(int k)
{
	int ans = 0;
	while(k)
	{
		ans += tre[k];
		k -= k&-k;
	}
	return ans;
}
int main(void)
{
	LL ans;
	int i, x;
	scanf("%d", &n);
	ans = 0;
	for(i=1;i<=2*n;i++)
	{
		scanf("%d", &x);
		if(flag[x]==0)
		{
			Update(i, 1);
			flag[x] = i;
		}
		else
		{
			ans += Query(i)-Query(flag[x]);
			Update(flag[x], -1);
		}
	}
	printf("%lld\n", ans);
	return 0;
}
/*
3
1 2 3 2 3 1
*/


基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕基于序贯蒙特卡洛模拟法的配电网可靠性评估展开研究,重点介绍了利用Matlab代码实现该方法的技术路径。文中详细阐述了序贯蒙特卡洛模拟的基本原理及其在配电网可靠性分析中的应用,包括系统状态抽样、时序模拟、故障判断与修复过程等核心环节。通过构建典型配电网模型,结合元件故障率、修复时间等参数进行大量仿真,获取系统可靠性指标如停电频率、停电持续时间等,进而评估不同运行条件或规划方案下的配电网可靠性水平。研究还可能涉及对含分布式电源、储能等新型元件的复杂配电网的适应性分析,展示了该方法在现代电力系统评估中的实用性与扩展性。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事电网规划与运行的技术工程师。; 使用场景及目标:①用于教学与科研中理解蒙特卡洛模拟在电力系统可靠性评估中的具体实现;②为实际配电网的可靠性优化设计、设备配置与运维策略制定提供仿真工具支持;③支撑学术论文复现与算法改进研究; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法流程,重点关注状态转移逻辑与时间序列模拟的实现细节,并尝试在IEEE标准测试系统上进行验证与扩展实验,以深化对方法机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值