CF1350D Orac and Medians(找规律)
Posted zhanglichen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1350D Orac and Medians(找规律)相关的知识,希望对你有一定的参考价值。
题意:
给出一个序列,每次操作可以选择一段子序列,使得里面的最小的比中位数大的值为t,子序列所有的值都变成这个t。(子序列长度len,中位数(len+1)/2)。
现在给出一个数k,询问能否通过操作把整个序列变成k。
题解:
找规律可以发现,我们需要序列里有一个数是k,同时需要存在两个大于等于k的数同时它们之间的距离要小于等于2。
对n是1的情况特判一下。
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+100; int a[maxn]; int n,k; int main () { int t; cin>>t; while (t--) { cin>>n>>k; for (int i=1;i<=n;i++) cin>>a[i]; if (n==1) { if (a[1]==k) printf("yes "); else printf("no "); continue; } int f=0; for (int i=1;i<=n;i++) if (a[i]==k) f=1; if (!f) { printf("no "); continue; } f=0; int pre=0; for (int i=1;i<=n;i++) { if (pre&&a[i]>=k&&i-pre<=2) { //printf("%d %d ",pre,i); f=1; } if (a[i]>=k) pre=i; } if (!f) printf("no "); else printf("yes "); } }
以上是关于CF1350D Orac and Medians(找规律)的主要内容,如果未能解决你的问题,请参考以下文章
CF-1350 D. Orac and Medians 思维
Codeforces Round #641 (Div. 2) D. Orac and Medians (贪心)