C. Circular Local MiniMax #794 div2

Problem - C - Codeforces

题意给你序列a,看看能不能重新排列,严格满足一个数小于两边或者大于两边

奇数必不可能:大 小 大小 大(第一个和最后一个两个大重复了,所以不可能的)

然后我又片面的想了个数,其实用不着,只需要按照大小排好最后检查一下即可

复制代码
#include<iostream>
#include<map>
#include<cstring>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=2e5+10;
int a[N],b[N];
map<int,int> mp;
int main(){
    int T;
    cin>>T;
    while(T--)
    {
        mp.clear();
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            mp[a[i]]++;
        }
        if(n%2==1)
        {
            cout<<"NO\n";
            continue;
        }
        else
        {
            sort(a+1,a+n+1);
            int k=1;
            for(int i=1;i<=n;i+=2)
            {
                b[i]=a[k];
                k++;
            }
            for(int i=2;i<=n;i+=2)
            {
                b[i]=a[k];
                k++;
            }
            int x=1;
            for(int i=2;i<=n-1;i++)
            {
                if(b[i]>b[i-1]&&b[i]>b[i+1]) continue;
                if(b[i]<b[i-1]&&b[i]<b[i+1]) continue;
                x=0;
                break;
            }
            if(!x)
            {
                cout<<"NO\n";
                continue;
            } 
            if((b[n]>b[1]&&b[n]>b[n-1])||(b[n]<b[1]&&b[n]<b[n-1]))
            {
                cout<<"YES\n";
                for(int i=1;i<=n;i++) cout<<b[i]<<" ";
                cout<<"\n";
            }
            else cout<<"NO\n";    
                
        }
            
    }
        
    return 0;
}
/*
n<=3  x
n=4:>=三个相同不行,两两相同可以,四个不同也可以
奇数都是no
偶数的相同的不能超过n/2
必须判断中间**** 

*/
复制代码

 

posted @   小志61314  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示