C. Tiles Comeback


C. Tiles Comeback

原创 于 2023-08-08 22:49:43 发布 · 粉丝可见 · 156 阅读 · 0 · 0 · 本内容遵循CC 4.0 BY-SA版权协议 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 · 编辑
文章链接:https://blog.csdn.net/hacker_51/article/details/132177928

题目:

样例:

10
4 2
1 1 1 1
14 3
1 2 1 1 7 5 3 3 1 3 4 4 2 4
3 3
3 1 3
10 4
1 2 1 2 1 2 1 2 1 2
6 2
1 3 4 1 6 6
2 2
1 1
4 2
2 1 1 1
2 1
1 2
3 2
2 2 2
4 1
1 1 2 2
YES
YES
NO
NO
YES
YES
NO
YES
YES
YES

解释:

思路:

单纯思维题,还是得要多练练,查看规律,

题目意思,是  k 是至少铺路的长度,这里是找出前面第一个元素所铺的路 和最后一个元素所铺的路之和要满足 k 的倍数,可以换个思维,让它们 >= k 也会称为 k 的倍数,因为也有可能加上中间的一些没有涂颜色的路,而这里有两种情况

第一种:        前后元素相同的,所以我们只要 这个元素的总和 >= k

第二种:        不同的时候,我们要先找到前面元素数量满足>=k ,再找 最后元素数量是否 >= k

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <unordered_map>
#define umap unordered_map
using namespace std;
const int N = 2e6 + 10;

inline void solve()
{
int n, k;
umap<int, int>r, arr;
cin >> n >> k;
for (int i = 0, num; i < n; ++i)
{
cin >> arr[i];
r[arr[i]]++;
}
if (arr[0] == arr[n - 1] && r[arr[0]] >= k)
{
puts("YES");
return ;
}
if (arr[0] != arr[n - 1])
{
for (int i = 0, l = 0, r = 0; i < n; ++i)
{
if (arr[i] == arr[0])
++l;
if (l >= k && arr[i] == arr[n - 1])
{
++r;
if (r >= k)
{
puts("YES");
return ;
}
}
}
}
puts("NO");
return ;
}

int main()
{
int _t;
cin >> _t;
while (_t--)
{
solve();
}
return 0;
}

最后提交:


觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭

微信二维码

wechat pay

支付宝二维码

ali pay

C. Tiles Comeback
http://blog.angindem.cn/2023/08/08/Angindem-CSDN博客/021_21/
作者
Angindem
发布于
2023年8月8日
许可协议