Codeforces Round #641 (Div. 2)D. Orac and Medians
Posted Lnn.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #641 (Div. 2)D. Orac and Medians相关的知识,希望对你有一定的参考价值。
前言:好久没写题解了,虽然一直在刷,但是懒。。
题目传送门
D. Orac and Medians
题目类型:思维、中位数、转换。
解析:从最简单的想:选两个数,那么会转换为较小的数,只要有一个≥k的数在k旁边,就能整出2个连续k。那么就可以选两个k加一个其他数,一起变成k,重复就全部变成k了。
如果k旁边的数都小于k,那么可以让≥k的数靠近k。
设x≥k,问题就转化为整出连续的(≥2)x。那么要求3个数中要有2个≥k,4个中有3个,5个中有3个…可以发现3个中有2个是整出连续x的充分必要条件。(4个中有3个,5个中有3个…是包含3个中有2个的(鸽巢平分))。
所以就看是否存在3个中有两个≥k的,特判n==1。
code:
void solve()
ll flag = 0;
for(ll i = 1 ; i <= n ; ++i)
flag += (a[i] == k);
if(!flag)cout << "NO" << endl ;
else if(n == 1)cout << "YES" << endl ;
else
for(ll i = 1 ; i <= n ; ++i)
ll sum = 0;
for(ll j = i ; j <= n && j <= i+2 ; ++j)
sum += (a[j] >= k);
if(sum >= 2)
cout << "YES" << endl ;
return;
cout << "NO" << endl ;
以上是关于Codeforces Round #641 (Div. 2)D. Orac and Medians的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #641 (Div. 2)D. Orac and Medians
Codeforces Round #436 E. Fire(背包dp+输出路径)
[ACM]Codeforces Round #534 (Div. 2)