【题解】UVA12416题解

UVA12416 题解


思路分析

由题意,每次可以同时合并每一组连续空格中若干个的连续两个的空格。

显然,空格数最多的那一组连续空格最难满足(变为一个空格)。所以我们计算这组即可。不妨设这组第 ii 次变化后有 xix_i 个空格。(初始记为 x0x_0

每次,我们将这组的两个空格变为一个空格,即 xi+1=xi2x_{i + 1} = \frac{x_i}{2}。但是 xi2\frac{x_i}{2} 不一定为整数,所以按奇偶性分类讨论。

  1. 偶数。偶数最好算,xi+1=xi2x_{i + 1} = \frac{x_i}{2}
  2. 奇数。奇数个空格合并可以去掉最后一个空格再除以二。最后补上被去掉的最后一个空格即可。即 xi+1=xi12+1x_{i + 1} = \frac{x_i - 1}{2} + 1

依照上面计算并统计操作次数即可。注意操作到 xi=1x_i = 1 时停止,ii 即为答案。

关键代码

int maxn = -1, t = 0;
bool sq = false;
for(int i = 0;i < s.size();i++)
{
	if(s[i] == ' ')
	{
		sq = true;
		t++;
	}
	if(s[i] != ' ')
	{
		if(sq) maxn = max(t, maxn) ;
		sq = false;
		t = 0;
	}
}
int cnt = 0;
while(maxn > 1)
{
	if(maxn % 2 == 1)
	{
		maxn = (maxn - 1) / 2 + 1;
	}
	else
	{
		maxn = maxn / 2;
	}
	cnt++;
}
cout << cnt << endl;
posted @ 2022-11-01 12:36  邻补角-SSA  阅读(8)  评论(0)    收藏  举报  来源