【题解】UVA12416题解
UVA12416 题解
思路分析
由题意,每次可以同时合并每一组连续空格中若干个的连续两个的空格。
显然,空格数最多的那一组连续空格最难满足(变为一个空格)。所以我们计算这组即可。不妨设这组第 次变化后有 个空格。(初始记为 )
每次,我们将这组的两个空格变为一个空格,即 。但是 不一定为整数,所以按奇偶性分类讨论。
- 偶数。偶数最好算,。
- 奇数。奇数个空格合并可以去掉最后一个空格再除以二。最后补上被去掉的最后一个空格即可。即 。
依照上面计算并统计操作次数即可。注意操作到 时停止, 即为答案。
关键代码
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;

浙公网安备 33010602011771号