璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:usaco22open_photoshoot_b
problems
名称Photoshoot B
题目编号USACO22OPEN_B1
题目链接luogu.com.cn/…
来源USACO
算法分类字符串, 思想
难易程度看懂题解

Photoshoot B

想法

当反转一次前缀时,前缀中处于奇数位置的G会变到偶数位置,处于偶数位置的G会变到奇数位置。如果将字符串以2为长度分块,会发现每个块内的G与H的位置会发生翻转。

所以将长度为2的块中不同的块取出,根据是否需要翻转重新构建一个bool序列,在序列中当true与false交替时需要前缀翻转,统计交替次数也就是统计需要翻转的次数。

代码实现

#include<iostream>
#include<vector>
using namespace std;
 
int main()
{
	int n, cnt=0;
	cin >> n;
	vector<char>line(n);
	vector<bool>s;
	for(char& i : line)
		cin >> i;
	for (int i = 0; i < n; i=i+2) 
		if(line[i] != line[i+1])
		{
			if(line[i] == 'G')
				s.push_back(true);
			else
				s.push_back(false);
		}
	s.push_back(false);
	for (int i = 0; i < (int)s.size()-1; ++i) {
		if(s[i] ^ s[i+1])
			cnt++;
	}
	cout << cnt;
 
	return 0;
}
/app/www/public/data/pages/icpc/problems/usaco22open_photoshoot_b.txt · 最后更改: 2023/02/08 10:23 由 温婕莺