Codeforces Round 924 (Div. 2 ABCDE题 视频讲解)

A. Rectangle Cutting

Problem Statement

Bob has a rectangle of size a × b a \times b a×b. He tries to cut this rectangle into two rectangles with integer sides by making a cut parallel to one of the sides of the original rectangle. Then Bob tries to form some other rectangle from the two resulting rectangles, and he can rotate and move these two rectangles as he wishes.

Note that if two rectangles differ only by a 9 0 ∘ 90^{\circ} 90∘ rotation, they are considered the same . For example, the rectangles 6 × 4 6 \times 4 6×4 and 4 × 6 4 \times 6 4×6 are considered the same.

Thus, from the 2 × 6 2 \times 6 2×6 rectangle, another rectangle can be formed, because it can be cut into two 2 × 3 2 \times 3 2×3 rectangles, and then these two rectangles can be used to form the 4 × 3 4 \times 3 4×3 rectangle, which is different from the 2 × 6 2 \times 6 2×6 rectangle.

However, from the 2 × 1 2 \times 1 2×1 rectangle, another rectangle cannot be formed, because it can only be cut into two rectangles of 1 × 1 1 \times 1 1×1, and from these, only the 1 × 2 1 \times 2 1×2 and 2 × 1 2 \times 1 2×1 rectangles can be formed, which are considered the same.

Help Bob determine if he can obtain some other rectangle, or if he is just wasting his time.

Input

Each test consists of multiple test cases. The first line contains a single integer t t t ( 1 ≤ t ≤ 1 0 4 1 \leq t \leq 10^4 1≤t≤104) --- the number of test cases. This is followed by the description of the test cases.

The single line of each test case contains two integers a a a and b b b ( 1 ≤ a , b ≤ 1 0 9 1 \le a, b \le 10^9 1≤a,b≤109) --- the size of Bob's rectangle.

Output

For each test case, output "Yes" if Bob can obtain another rectangle from the a × b a \times b a×b rectangle. Otherwise, output "No".

You can output the answer in any case (upper or lower). For example, the strings "yEs", "yes", "Yes", and "YES" will be recognized as positive answers.

Example

Example

input
7
1 1
2 1
2 6
3 2
2 2
2 4
6 3
output
No
No
Yes
Yes
Yes
Yes
No

Note

In the first test case, the 1 × 1 1 \times 1 1×1 rectangle cannot be cut into two rectangles, so another rectangle cannot be obtained from it.

In the fourth test case, the 3 × 2 3 \times 2 3×2 rectangle can be cut into two 3 × 1 3 \times 1 3×1 rectangles, and from these, the 1 × 6 1 \times 6 1×6 rectangle can be formed.

In the fifth test case, the 2 × 2 2 \times 2 2×2 rectangle can be cut into two 1 × 2 1 \times 2 1×2 rectangles, and from these, the 1 × 4 1 \times 4 1×4 rectangle can be formed.

Solution

具体见文后视频。


Code

cpp 复制代码
#include <bits/stdc++.h>
#define int long long

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

bool Check(int A1, int B1, int A2, int B2) { return (A1 == A2 && B1 == B2) || (A1 == B2 && B1 == A2); }

void solve()
{
	int A, B;

	cin >> A >> B;

	if ((A & 1) && (B & 1)) cout << "No" << endl;
	else
	{
		if ((A % 2 == 0) && !Check(A, B, A / 2, B * 2)) cout << "Yes" << endl;
		else if ((B % 2 == 0) && !Check(A, B, A * 2, B / 2)) cout << "Yes" << endl;
		else cout << "No" << endl;
	}
}

signed main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	int Data;

	cin >> Data;

	while (Data --)
		solve();

	return 0;
}

B. Equalize

Problem Statement

Vasya has two hobbies --- adding permutations † ^{\dagger} † to arrays and finding the most frequently occurring element. Recently, he found an array a a a and decided to find out the maximum number of elements equal to the same number in the array a a a that he can obtain after adding some permutation to the array a a a.

More formally, Vasya must choose exactly one permutation p 1 , p 2 , p 3 , ... , p n p_1, p_2, p_3, \ldots, p_n p1,p2,p3,...,pn of length n n n, and then change the elements of the array a a a according to the rule a i : = a i + p i a_i := a_i + p_i ai:=ai+pi. After that, Vasya counts how many times each number occurs in the array a a a and takes the maximum of these values. You need to determine the maximum value he can obtain.

† ^{\dagger} †A permutation of length n n n is an array consisting of n n n distinct integers from 1 1 1 to n n n in arbitrary order. For example, 2 , 3 , 1 , 5 , 4 2,3,1,5,4 2,3,1,5,4 is a permutation, but 1 , 2 , 2 1,2,2 1,2,2 is not a permutation ( 2 2 2 appears twice in the array), and 1 , 3 , 4 1,3,4 1,3,4 is also not a permutation ( n = 3 n=3 n=3 but there is 4 4 4 in the array).

Input

Each test consists of multiple test cases. The first line contains a single integer t t t ( 1 ≤ t ≤ 2 ⋅ 1 0 4 1 \leq t \leq 2 \cdot 10^4 1≤t≤2⋅104) --- the number of test cases. Then follows the description of the test cases.

The first line of each test case contains a single integer n n n ( 1 ≤ n ≤ 2 ⋅ 1 0 5 1 \le n \le 2 \cdot 10^5 1≤n≤2⋅105) --- the length of the array a a a.

The second line of each test case contains n n n integers a 1 , a 2 , ... , a n a_1, a_2, \ldots, a_n a1,a2,...,an ( 1 ≤ a i ≤ 1 0 9 1 \le a_i \le 10^9 1≤ai≤109) --- the elements of the array a a a.

It is guaranteed that the sum of n n n over all test cases does not exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2⋅105.

Output

For each test case, output a single number --- the maximum number of elements equal to the same number after the operation of adding a permutation.

Example

Example

input
7
2
1 2
4
7 1 4 1
3
103 102 104
5
1 101 1 100 1
5
1 10 100 1000 1
2
3 1
3
1000000000 999999997 999999999
output
2
2
3
2
1
1
2

Note

In the first test case, it is optimal to choose p = 2 , 1 p = 2, 1 p=2,1. Then after applying the operation, the array a a a will be 3 , 3 3, 3 3,3, in which the number 3 3 3 occurs twice, so the answer is 2 2 2.

In the second test case, one of the optimal options is p = 2 , 3 , 1 , 4 p = 2, 3, 1, 4 p=2,3,1,4. After applying the operation, the array a a a will be 9 , 4 , 5 , 5 9, 4, 5, 5 9,4,5,5. Since the number 5 5 5 occurs twice, the answer is 2 2 2.

Solution

具体见文后视频。


Code

cpp 复制代码
#include <bits/stdc++.h>
#define int long long

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int SIZE = 2e5 + 10;

int N;
int A[SIZE], B[SIZE];

void solve()
{
	cin >> N;

	for (int i = 1; i <= N; i ++)
		cin >> A[i];

	sort(A + 1, A + 1 + N);

	int M = 0;
	for (int i = 2; i <= N; i ++)
		if (A[i] - A[i - 1] != 0)
			B[ ++ M] = A[i] - A[i - 1], B[M] += B[M - 1];
	int Result = 1;
	for (int i = 1; i <= M; i ++)
	{
		int j = lower_bound(B, B + M + 1, B[i] - N + 1) - B;
		Result = max(Result, i - j + 1);
	}

	cout << Result << endl;
}

signed main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	int Data;

	cin >> Data;

	while (Data --)
		solve();

	return 0;
}

C. Physical Education Lesson

Problem Statement

In a well-known school, a physical education lesson took place. As usual, everyone was lined up and asked to settle in "the first-- k k k-th" position.

As is known, settling in "the first-- k k k-th" position occurs as follows: the first k k k people have numbers 1 , 2 , 3 , ... , k 1, 2, 3, \ldots, k 1,2,3,...,k, the next k − 2 k - 2 k−2 people have numbers k − 1 , k − 2 , ... , 2 k - 1, k - 2, \ldots, 2 k−1,k−2,...,2, the next k k k people have numbers 1 , 2 , 3 , ... , k 1, 2, 3, \ldots, k 1,2,3,...,k, and so on. Thus, the settling repeats every 2 k − 2 2k - 2 2k−2 positions. Examples of settling are given in the "Note" section.

The boy Vasya constantly forgets everything. For example, he forgot the number k k k described above. But he remembers the position he occupied in the line, as well as the number he received during the settling. Help Vasya understand how many natural numbers k k k fit under the given constraints.

Note that the settling exists if and only if k > 1 k > 1 k>1. In particular, this means that the settling does not exist for k = 1 k = 1 k=1.

Input

Each test consists of multiple test cases. The first line contains a single integer t t t ( 1 ≤ t ≤ 100 1 \leq t \leq 100 1≤t≤100) --- the number of test cases. This is followed by the description of the test cases.

The only line of each test case contains two integers n n n and x x x ( 1 ≤ x < n ≤ 1 0 9 1 \le x < n \le 10^9 1≤x<n≤109) --- Vasya's position in the line and the number Vasya received during the settling.

Output

For each test case, output a single integer --- the number of different k k k that fit under the given constraints.

It can be proven that under the given constraints, the answer is finite.

Example

Example

input
5
10 2
3 1
76 4
100 99
1000000000 500000000
output
4
1
9
0
1

Note

In the first test case, k k k equals 2 , 3 , 5 , 6 2, 3, 5, 6 2,3,5,6 are suitable.

An example of settling for these k k k:

k k k / № 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10
2 2 2 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 2
3 3 3 1 1 1 2 2 2 3 3 3 2 2 2 1 1 1 2 2 2 3 3 3 2 2 2 1 1 1 2 2 2
5 5 5 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 2 2 2
6 6 6 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2

In the second test case, k = 2 k = 2 k=2 is suitable.

Solution

具体见文后视频。


Code

cpp 复制代码
#include <bits/stdc++.h>
#define int long long

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

void solve()
{
	int N, X;

	cin >> N >> X;

	std::vector<int> F1, F2;
	for (int i = 1; i <= (N - X) / i; i ++)
		if ((N - X) % i == 0) 
		{
			F1.push_back(i);
			if ((N - X) / i != i) F1.push_back((N - X) / i);
		}
	for (int i = 1; i <= (N + X - 2) / i; i ++)
		if ((N + X - 2) % i == 0) 
		{
			F2.push_back(i);
			if ((N + X - 2) / i != i) F2.push_back((N + X - 2) / i);
		}

	set<int> Result;
	for (auto c : F1)
	{
		if (c & 1) continue;
		int K = c + 2 >> 1;
		if (K >= X) Result.insert(K);
	}
	for (auto c : F2)
	{
		if (c & 1) continue;
		int K = c + 2 >> 1;
		if (X >= 2 && X < K) Result.insert(K);
	}

	cout << Result.size() << endl;
}

signed main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	int Data;

	cin >> Data;

	while (Data --)
		solve();

	return 0;
}

D. Lonely Mountain Dungeons

Problem Statement

Once, the people, elves, dwarves, and other inhabitants of Middle-earth gathered to reclaim the treasures stolen from them by Smaug. In the name of this great goal, they rallied around the powerful elf Timothy and began to plan the overthrow of the ruler of the Lonely Mountain.

The army of Middle-earth inhabitants will consist of several squads. It is known that each pair of creatures of the same race , which are in different squads, adds b b b units to the total strength of the army. But since it will be difficult for Timothy to lead an army consisting of a large number of squads, the total strength of an army consisting of k k k squads is reduced by ( k − 1 ) ⋅ x (k - 1) \cdot x (k−1)⋅x units. Note that the army always consists of at least one squad.

It is known that there are n n n races in Middle-earth, and the number of creatures of the i i i-th race is equal to c i c_i ci. Help the inhabitants of Middle-earth determine the maximum strength of the army they can assemble.

Input

Each test consists of multiple test cases. The first line contains a single integer t t t ( 1 ≤ t ≤ 2 ⋅ 1 0 4 1 \le t \le 2 \cdot 10^4 1≤t≤2⋅104) --- the number of test cases. The description of the test cases follows.

The first line of each test case contains three integers n n n, b b b, and x x x ( 1 ≤ n ≤ 2 ⋅ 1 0 5 1 \le n \le 2 \cdot 10^5 1≤n≤2⋅105, 1 ≤ b ≤ 1 0 6 , 0 ≤ x ≤ 1 0 9 1 \le b \le 10^6, 0 \le x \le 10^9 1≤b≤106,0≤x≤109) --- the number of races and the constants b b b and x x x described above.

The second line of each test case contains n n n integers c 1 , c 2 , ... , c n c_1, c_2, \ldots, c_n c1,c2,...,cn ( 1 ≤ c i ≤ 2 ⋅ 1 0 5 1 \le c_i \le 2 \cdot 10^5 1≤ci≤2⋅105) --- the number of creatures of each of the n n n races.

It is guaranteed that the sum of the values c 1 + c 2 + ... + c n c_1 + c_2 + \ldots + c_n c1+c2+...+cn over all test cases does not exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2⋅105.

Output

For each test case, output a single integer --- the maximum strength of the army that the inhabitants of Middle-earth can assemble.

Example

Example

input
5
3 1 0
1 2 3
3 5 10
2 5 3
4 3 3
3 2 1 2
4 1 0
4 1 4 2
4 1 10
4 1 4 2
output
4
40
9
13
0

Note

In the first test case, the inhabitants of Middle-earth can form 3 3 3 squads. Since x = 0 x = 0 x=0, the army's strength will not decrease due to the number of squads. The inhabitants can be distributed among the squads as follows:

  • The single representative of the first species can be sent to the first squad.
  • The first representative of the second species can be sent to the first squad, the second representative of the second species can be sent to the second squad. Then the total strength of the army will increase by b = 1 b = 1 b=1.
  • The first representative of the third species can be sent to the first squad, the second representative of the third species can be sent to the second squad, the third representative of the third species can be sent to the third squad. Then the total strength of the army will increase by 3 ⋅ b = 3 3 \cdot b = 3 3⋅b=3, as they form three pairs in different squads.

Thus, the total strength of the army is 4 4 4.

In the second test case, the inhabitants of Middle-earth can form 3 3 3 squads. Since x = 10 x = 10 x=10, the army's strength will decrease by 20 20 20. The inhabitants can be distributed among the squads as follows:

  • The first representative of the first species can be sent to the first squad, the second representative of the first species can be sent to the second squad. Then the total strength of the army will increase by b = 5 b = 5 b=5.
  • The first and second representatives of the second species can be sent to the first squad, the third and fourth representatives of the second species can be sent to the second squad, the fifth representative of the third species can be sent to the third squad. Then the total strength of the army will increase by 8 ⋅ b = 40 8 \cdot b = 40 8⋅b=40.
  • The first representative of the third species can be sent to the first squad, the second representative of the third species can be sent to the second squad, the third representative of the third species can be sent to the third squad. Then the total strength of the army will increase by 3 ⋅ b = 15 3 \cdot b = 15 3⋅b=15, as they form three pairs in different squads.

Thus, the total strength of the army is 5 + 40 + 15 − 20 = 40 5 + 40 + 15 - 20 = 40 5+40+15−20=40.

Solution

具体见文后视频。

Code

cpp 复制代码
#include <bits/stdc++.h>
#define int long long

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int SIZE = 2e5 + 10;

int N, B, X;
int C[SIZE], D[SIZE];

int F(int K)
{
	int Result = 0;
	for (int i = 1; i <= N; i ++)
	{
		if (C[i] <= K) Result += C[i] * (C[i] - 1) / 2 * B;
		else
		{
			int Sum = 0;
			for (int j = 1; j <= K; j ++)
				D[j] = (C[i] - Sum + K - j) / (K - j + 1), Sum += D[j];
			Sum = 0;
			for (int j = 1; j <= K; j ++)
				Result += D[j] * (C[i] - Sum - D[j]) * B, Sum += D[j];
		}
	}
	Result -= (K - 1) * X;
	return Result;
}

void solve()
{
	cin >> N >> B >> X;

	int Sum = 0;
	for (int i = 1; i <= N; i ++)
		cin >> C[i], Sum += C[i];

	int l = 1, r = Sum;
	while(l < r) {
	    int lmid = l + (r - l) / 3;
	    int rmid = r - (r - l) / 3;
	    if(F(lmid) <= F(rmid)) l = lmid + 1;
	    else r = rmid - 1;
	}
	
	printf("%lld\n", max(F(l), F(r)));
}

signed main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	int Data;

	cin >> Data;

	while (Data --)
		solve();

	return 0;
}

E. Modular Sequence

Problem Statement

You are given two integers x x x and y y y. A sequence a a a of length n n n is called modular if a 1 = x a_1=x a1=x, and for all 1 < i ≤ n 1 < i \le n 1<i≤n the value of a i a_{i} ai is either a i − 1 + y a_{i-1} + y ai−1+y or a i − 1   m o d   y a_{i-1} \bmod y ai−1mody. Here x   m o d   y x \bmod y xmody denotes the remainder from dividing x x x by y y y.

Determine if there exists a modular sequence of length n n n with the sum of its elements equal to S S S, and if it exists, find any such sequence.

Input

Each test contains multiple test cases. The first line contains the number of test cases t t t ( 1 ≤ t ≤ 2 ⋅ 1 0 4 1 \le t \le 2 \cdot 10^4 1≤t≤2⋅104). The description of the test cases follows.

The first and only line of each test case contains four integers n n n, x x x, y y y, and s s s ( 1 ≤ n ≤ 2 ⋅ 1 0 5 1 \le n \le 2 \cdot 10^5 1≤n≤2⋅105, 0 ≤ x ≤ 2 ⋅ 1 0 5 0 \le x \le 2 \cdot 10^5 0≤x≤2⋅105, 1 ≤ y ≤ 2 ⋅ 1 0 5 1 \le y \le 2 \cdot 10^5 1≤y≤2⋅105, 0 ≤ s ≤ 2 ⋅ 1 0 5 0 \le s \le 2 \cdot 10^5 0≤s≤2⋅105) --- the length of the sequence, the parameters x x x and y y y, and the required sum of the sequence elements.

The sum of n n n over all test cases does not exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2⋅105, and also the sum of s s s over all test cases does not exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2⋅105.

Output

For each test case, if the desired sequence exists, output "Yes" on the first line (without quotes). Then, on the second line, output n n n integers a 1 , a 2 , ... , a n a_1, a_2, \ldots, a_n a1,a2,...,an separated by a space --- the elements of the sequence a a a. If there are multiple suitable sequences, output any of them.

If the sequence does not exist, output "No" on a single line.

You can output each letter in any case (lowercase or uppercase). For example, the strings "yEs", "yes", "Yes", and "YES" will be accepted as a positive answer.

Example

Example

input
3
5 8 3 28
3 5 3 6
9 1 5 79
output
YES
8 11 2 2 5
NO
NO

Note

In the first example, the sequence 8 , 11 , 2 , 5 , 2 8, 11, 2, 5, 2 8,11,2,5,2 satisfies the conditions. Thus, a 1 = 8 = x a_1 = 8 = x a1=8=x, a 2 = 11 = a 1 + 3 a_2 = 11 = a_1 + 3 a2=11=a1+3, a 3 = 2 = a 2   m o d   3 a_3 = 2 = a_2 \bmod 3 a3=2=a2mod3, a 4 = 5 = a 3 + 3 a_4 = 5 = a_3 + 3 a4=5=a3+3, a 5 = 2 = a 4   m o d   3 a_5 = 2 = a_4 \bmod 3 a5=2=a4mod3.

In the second example, the first element of the sequence should be equal to 5 5 5, so the sequence 2 , 2 , 2 2, 2, 2 2,2,2 is not suitable.

Solution

具体见文后视频。


Code

cpp 复制代码
#include <bits/stdc++.h>
#define int long long

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int SIZE = 4e5 + 10;

int N, X, Y, S;
int F[SIZE], A[SIZE];

void solve()
{
	cin >> N >> X >> Y >> S;

	if (S < X + (N - 1) * (X % Y) || (S - N * (X % Y)) % Y != 0)
	{
		cout << "NO" << endl;
		return;
	}

	S -= N * (X % Y), S /= Y;
	for (int i = 0; i <= S; i ++)
		F[i] = 1e18;
	F[0] = 0;
	for (int i = 1; ; i ++)
	{
		int V = i * (i + 1) / 2;
		if (V > S) break;
		for (int j = 0; j <= S; j ++)
			F[j + V] = min(F[j + V], F[j] + i + 1);
	}

	int Base = X / Y, Pos = -1;
	for (int i = 1; i <= N; i ++)
		if (S >= Base && F[S - Base] <= N - i)
		{
			Pos = i;
			break;
		}
		else
			S -= Base, Base ++;
	if (Pos == -1)
	{
		cout << "NO" << endl;
		return;
	}

	A[1] = X / Y, S -= Base;
	for (int i = 2; i <= Pos; i ++)
		A[i] = A[i - 1] + 1;
	for (int i = Pos + 1; i <= N; i ++)
		A[i] = 0;
	while (S)
		for (int i = 1; ; i ++)
		{
			int V = i * (i + 1) / 2;
			if (V > S) break;
			if (F[S - V] + i + 1 == F[S])
			{
				for (int j = 0; j <= i; j ++)
					A[ ++ Pos] = j;
				S -= V;
				break;
			}
		}

	cout << "YES" << endl;
	for (int i = 1; i <= N; i ++)
		cout << A[i] * Y + (X % Y) << " ";
	cout << endl;
}

signed main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	int Data;

	cin >> Data;

	while (Data --)
		solve();

	return 0;
}

视频题解

Codeforces Round 924 (Div. 2)(CF924 之 A ~ E)


最后祝大家早日

相关推荐
GG.WinGel21 小时前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯
开开心心就好21 小时前
电脑小说阅读器,支持朗读和自定义皮肤
服务器·开发语言·javascript·算法·pdf·c#·音视频
闻缺陷则喜何志丹1 天前
【c++20】协程与屏障
c++·算法·c++20·携程·屏障
会编程的小孩1 天前
C++ 内存分区、堆与栈、static、union 完整修正版文档
c++
erzong2311 天前
Linux操作系统:线程池&踩坑修复
linux·运维·算法
多弗朗皮卡丘1 天前
C++的类型转换
开发语言·c++
alphaTao1 天前
LeetCode 每日一题 2026/10/19-2026/10/25
算法·leetcode
火2251 天前
# C++ 微服务即时通讯系统(三):网关设计——HTTP 请求、Session 鉴权与 WebSocket 通知上一篇
c++·http·微服务
ZhengEnCi1 天前
一亿条数据取前100条完全指南:从全量排序到分块流式最小堆的4种解法实测
python·算法·排序算法
C++ 老炮儿的技术栈1 天前
机器人的坐标,像 XYZ 的坐标值,是用单精度浮点还是用双精度浮点?
c语言·c++·人工智能·单片机·c