Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2) 题解 (A~E)

A. King Keykhosrow’s Mystery

上限是 l c m ( a , b ) lcm(a, b) lcm(a,b),直接枚举即可

#include 

void solve()
{
   
	int a, b; std::cin >> a >> b;

	int l = std::lcm(a, b);
	for(int i = std::min(a, b); i <= l; i++)
	{
   
		if(i % a == i % b)
		{
   
			std::cout << i << "\n";
			return;
		}
	}
}

int main()
{
   
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	int t; std::cin >> t;
	while(t--) solve();

	return 0;
}

B. Rakhsh’s Revival

贪心,每次 0 0 0 的数量够 m m m 个了就往后跳 k k k

#include 

void solve()
{
   
	int n, m, k; std::cin >> n >> m >> k;
	std::string s; std::cin >> s;

	int cnt = 0, ans = 0;
	for(int i = 0; i < n; i++)
	{
   
		if(s[i] == '0') cnt++;
		if(s[i] == '1') cnt = 0;

		if(cnt == m) 
		{
   
			i = std::min(n, i + k - 1);
			cnt = 0;
			ans++;
		}
	}

	std::cout << ans << "\n";
}

int main()
{
   
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	int t; std::cin >> t;
	while(t--) solve();

	return 0;
}

C. Trapped in the Witch’s Labyrinth

整个网络可以看成一个有向图,超出网络视为终点,按照给出的字母连反边,从终点开始搜索,路上经过的点代表着最后都会走出这张图,所以不能成为答案,标记一下。处理完这些之后,再处理问号,对于一个问号,如果它上下左右的点都被标记了,说明它最后也会走出去,也不能成为答案。把这些点抛去之后的点就是答案。

#include 

void solve()
{
   
	int n, m; std::cin >> n >> m;

	std::vector<std::string> s(n);
	for(int i = 0; i < n; i++) std::cin >> s[i];

	std::vector<std::vector<int>> adj(n * m + 1);
	int ed = n * m;
	for(int i = 0; i < n; i++)
	{
   
		for(int j = 0; j < m; j++)
		{
   
			int x = i + (s[i][j] == 'D') - (s[i][j] == 'U');
			int y = j + (s[i][j] == 'R') - (s[i][j] == 'L');
			if(x >= n || y >= m || x < 0 || y < 0) adj[ed].emplace_back(i * m + j);
			else adj[x * m + y].emplace_back(i * m + j);
		}
	}

	std::vector<int> vis(n * m

你可能感兴趣的:(c++,算法)