当前位置:网站首页>Codeforces Round #801 (Div. 2)A~C
Codeforces Round #801 (Div. 2)A~C
2022-07-06 16:15:00 【Hello_ Ä】
Codeforces Round #801 (Div. 2)A~C
Problem - A - Codeforces
Michael and Joe are playing a game. The game is played on a grid with n rows and m columns, filled with distinct integers. We denote the square on the i-th (1≤i≤n) row and j-th (1≤j≤m) column by (i,j) and the number there by aij.
Michael starts by saying two numbers h (1≤h≤n) and w (1≤w≤m). Then Joe picks any h×w subrectangle of the board (without Michael seeing).
Formally, an h×w subrectangle starts at some square (a,b) where 1≤a≤n−h+1 and 1≤b≤m−w+1. It contains all squares (i,j) for a≤i≤a+h−1 and b≤j≤b+w−1.

Finally, Michael has to guess the maximum number in the subrectangle. He wins if he gets it right.
Because Michael doesn’t like big numbers, he wants the area of the chosen subrectangle (that is, h⋅w), to be as small as possible, while still ensuring that he wins, not depending on Joe’s choice. Help Michael out by finding this minimum possible area.
It can be shown that Michael can always choose h,w for which he can ensure that he wins.
Input
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤20). Description of the test cases follows.
The first line of each test case contains two integers n and m (1≤n,m≤40) — the size of the grid.
Each of the following n lines contains m integers. The j-th integer on the i-th line is aij (−109≤aij≤10 9) — the element in the cell (i,j).
It is guaranteed that all the numbers are distinct (that is, if ai1j1=ai2j2, then i1=i2,j1=j2).
Output
For each test case print a single positive integer — the minimum possible area the subrectangle can have while still ensuring that Michael can guarantee the victory.
Example
input
3
1 1
3
4 4
2 12 6 10
3 15 16 4
1 13 8 11
14 7 9 5
2 3
-7 5 2
0 8 -3
output
1
9
4
Problem analysis
The problem is that , Here's a matrix for you , You can ask a person to draw an area of x( Long * high ) The submatrix of , Then you can guess the maximum number in this matrix , Ask what is the smallest area of the submatrix that you can win safely .
Is to find the maximum value in the matrix , Then look at the coordinates of this value to the matrix area of the four corners , Take one of the biggest , In this way, we can ensure that no matter how the submatrix is taken , Must be able to make this maximum appear in the submatrix .
AC Code
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>
#define endl '\n'
#define int ll
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin >> t;
while (t--)
{
int n, m;
cin >> n >> m;
ll mx = -1e10, res = 0;
vector<vector<int>>v(n, vector<int>(m));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> v[i][j];
if (v[i][j] >= mx)
{
int l_up = (i + 1) * (j + 1);
int r_up = (i + 1) * (m - j);
int l_down = (n - i) * (j + 1);
int r_down = (n - i) * (m - j);
res = max(max(l_up, r_up), max(l_down, r_down));
mx = v[i][j];
}
}
}
cout << res << endl;
}
return 0;
}
Problem - B - Codeforces
Mike and Joe are playing a game with some stones. Specifically, they have n piles of stones of sizes a1,a2,…,an. These piles are arranged in a circle.
The game goes as follows. Players take turns removing some positive number of stones from a pile in clockwise order starting from pile 1. Formally, if a player removed stones from pile i on a turn, the other player removes stones from pile ((imodn)+1) on the next turn.
If a player cannot remove any stones on their turn (because the pile is empty), they lose. Mike goes first.
If Mike and Joe play optimally, who will win?
Input
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤1000). Description of the test cases follows.
The first line of each test case contains a single integer n (1≤n≤50) — the number of piles.
The second line contains n integers a1,a2,…,an (1≤ai≤10^ 9) — the size of the piles.
Output
For each test case print the winner of the game, either “Mike” or “Joe” on its own line (without quotes).
Example
input
2
1
37
2
100 100
output
Mike
Joe
Problem analysis
Says there is n Make stones , Each pile of stones has a[i] A stone , In limine mike Start with the first pile , You can take any number each time , The next person can only go to the first (i+1)%n Pile stones and take stones , If anyone can't get the stone first , Who is lost . Ask who can win in the end .
If the stones are odd , Then just take it every time , When Joe When you go back to the beginning of the queue, you will lose without a stone , therefore n The odd number is mike It will win .
If it's even , that mike I always take odd stones ,joe It's an even number of stones . That is, who takes any stone pile in his queue first , He lost , So let's compare how many stones there are in the least number of stone piles on both sides , The least one loses , If the same , Just look at the pile in front , Lose in front .
AC Code
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>
#define endl '\n'
#define int ll
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
vector<int>v(n);
for (int i = 0; i < n; i++)cin >> v[i];
if (n % 2 == 1)
{
cout << "Mike" << endl;
continue;
}
int mn_j = 1e18, mn_o = 1e18, pos_j = -1, pos_o = -1;
for (int i = 0; i < n; i += 2)
{
if (mn_j > v[i])
{
mn_j = v[i];
pos_j = i;
}
}
for (int i = 1; i < n; i += 2)
{
if (mn_o > v[i])
{
mn_o = v[i];
pos_o = i;
}
}
if (mn_j<mn_o||(mn_j==mn_o&&pos_j<pos_o))cout << "Joe" << endl;
else cout << "Mike" << endl;
}
return 0;
}
Problem - C - Codeforces
You are given a grid with n rows and m columns. We denote the square on the i-th (1≤i≤n) row and j-th (1≤j≤m) column by (i,j) and the number there by aij. All numbers are equal to 1 or to −1.
You start from the square (1,1) and can move one square down or one square to the right at a time. In the end, you want to end up at the square (n,m).
Is it possible to move in such a way so that the sum of the values written in all the visited cells (including a11 and anm) is 0?

Input
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤104). Description of the test cases follows.
The first line of each test case contains two integers n and m (1≤n,m≤1000) — the size of the grid.
Each of the following n lines contains m integers. The j-th integer on the i-th line is aij (aij=1 or −1) — the element in the cell (i,j).
It is guaranteed that the sum of n⋅m over all test cases does not exceed 106.
Output
For each test case, print “YES” if there exists a path from the top left to the bottom right that adds up to 0, and “NO” otherwise. You can output each letter in any case.
Example
input
5
1 1
1
1 2
1 -1
1 4
1 -1 1 -1
3 4
1 -1 -1 -1
-1 1 1 -1
1 1 1 -1
3 4
1 -1 1 1
-1 1 -1 1
1 -1 1 1
output
NO
YES
YES
YES
NO
Problem analysis
The title is to give you a matrix , Only by 1 and -1 form , Start from the upper left corner , You can only go right and down , Ask if you can find a way to make the sum of this road 0.
First , Length of matrix n And width m Addition must be odd , If it's even , Then there will be odd numbers on the path , It is impossible for 0 Of .
Then we can directly find out the maximum and minimum values of walking from the top left to sitting down , As long as the range formed by the maximum and minimum values can include 0, Then you can find a way out , Not vice versa .
AC Code
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>
#define endl '\n'
#define int ll
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50;
int n, m;
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin >> t;
while (t--)
{
cin >> n >> m;
vector<vector<int>>v(n, vector<int>(m)), f(n, vector<int>(m));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cin >> v[i][j];
}
if ((n+m)%2==0)
{
cout << "NO" << endl;
continue;
}
int mn = v[0][0], mx = v[0][0];
f[0][0] = v[0][0];
for (int i = 1; i < n; i++)
{
f[i][0] = f[i - 1][0] + v[i][0];
}
for (int j = 1; j < m; j++)
{
f[0][j] = f[0][j - 1] + v[0][j];
}
for (int i = 1; i < n; i++)
{
for (int j = 1; j < m; j++)
{
f[i][j] = max(f[i - 1][j], f[i][j - 1]) + v[i][j];
}
}
mx = f[n - 1][m - 1];
for (int i = 1; i < n; i++)
{
for (int j = 1; j < m; j++)
{
f[i][j] = min(f[i - 1][j], f[i][j - 1]) + v[i][j];
}
}
mn = f[n - 1][m - 1];
if (mx >= 0 && mn <= 0)cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
边栏推荐
- [exercise-5] (UVA 839) not so mobile (balance)
- 浏览器打印边距,默认/无边距,占满1页A4
- QT实现窗口渐变消失QPropertyAnimation+进度条
- Bidirectional linked list - all operations
- The most complete programming language online API document
- Problem - 922D、Robot Vacuum Cleaner - Codeforces
- 日期加1天
- Alice and Bob (2021 Niuke summer multi school training camp 1)
- Specify the format time, and fill in zero before the month and days
- (POJ - 3685) matrix (two sets and two parts)
猜你喜欢

Suffix expression (greed + thinking)

Problem - 922D、Robot Vacuum Cleaner - Codeforces
![[exercise-5] (UVA 839) not so mobile (balance)](/img/8e/48dcf75f7347b36301df6fc129c09d.png)
[exercise-5] (UVA 839) not so mobile (balance)

pytorch提取骨架(可微)

读取和保存zarr文件

Pytorch extract skeleton (differentiable)

浏览器打印边距,默认/无边距,占满1页A4

Flask框架配置loguru日志库

C language is the watershed between low-level and high-level

Share an example of running dash application in raspberry pie.
随机推荐
QT实现窗口置顶、置顶状态切换、多窗口置顶优先关系
渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞
Openwrt source code generation image
Sword finger offer II 019 Delete at most one character to get a palindrome
D - function (HDU - 6546) girls' competition
“鬼鬼祟祟的”新小行星将在本周安全掠过地球:如何观看
Hdu-6025-prime sequence (girls' competition)
Luogu P1102 A-B number pair (dichotomy, map, double pointer)
第 300 场周赛 - 力扣(LeetCode)
[exercise -11] 4 values why sum is 0 (and 4 values of 0)
860. Lemonade change
QWidget代码设置样式表探讨
Codeforces Round #798 (Div. 2)A~D
Essai de pénétration (1) - - outils nécessaires, navigation
Codeforces Round #800 (Div. 2)AC
pytorch提取骨架(可微)
Bidirectional linked list - all operations
1605. Sum the feasible matrix for a given row and column
JS call camera
Codeforces Round #801 (Div. 2)A~C