• ZOJ4102 Array in the Pocket(2019浙江省赛)


    贪心~

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=100014;
    int a[maxn];
    int b[maxn];
    int vis[maxn];
    set<int>s;
    set<int>::iterator it;
    vector<int>va[maxn],vb[maxn];
    vector<int>v1,v2;
    int main()
    {
        int T;
        scanf ("%d",&T);
        while (T--) {
            int n;
            bool flag=true;
            scanf ("%d",&n);
            for (int i=1;i<=n;i++) {
                scanf("%d",&a[i]);
                vis[a[i]]++;
                if(vis[a[i]]>n/2) flag=false;
                s.insert(a[i]);
            }
            if(flag) {
                for(int i=1;i<=n;i++) {
                    it=s.begin();
                    if(*it==a[i]&&s.size()==1) {
                        for(int j=i+1;j<=n;j++)
                        if(a[j]!=a[i]) {
                            b[j]=a[i];
                            vis[a[i]]--;
                        }
                        for(int j=i;j<=n;j++)
                        if(a[j]==a[i]&&b[j]==0) v1.push_back(j);
                        for(int j=i-1;j>=1;j--) {
                            if(vis[a[i]]==0) break;
                            if(a[j]!=a[i]&&b[j]!=a[i]) {
                                v2.push_back(b[j]);
                                b[j]=a[i];
                                vis[a[i]]--;
                            }
                        }
                        s.erase((*it));
                        sort(v1.begin(),v1.end());
                        sort(v2.begin(),v2.end());
                        for(int i=0;i<v1.size();i++) b[v1[i]]=v2[i];
                        v1.clear();v2.clear();
                        break;
                    }
                    else {
                        if(*it==a[i])
                            it++;
                        b[i]=(*it);
                        vis[*it]--;
                        if(vis[*it]==0)
                            s.erase(*it);
                    }
                }
                for(int i=1;i<=n;i++) va[a[i]].push_back(i),vb[a[i]].push_back(b[i]);
                for(int i=1;i<=n;i++) {
                    sort(va[a[i]].begin(),va[a[i]].end());
                    sort(vb[a[i]].begin(),vb[a[i]].end());
                    for(int j=0;j<va[a[i]].size();j++)
                        b[va[a[i]][j]]=vb[a[i]][j];
                    va[a[i]].clear();
                    vb[a[i]].clear();
                }
                for(int i=1;i<=n;i++) printf(i==n?"%d
    ":"%d ",b[i]);
            }
            else printf("Impossible
    ");
            for(int i=1;i<=n;i++) vis[i]=0,b[i]=0;
            s.clear();
        }
        return 0;
    }
  • 相关阅读:
    web学生选课平台
    YUM仓库的搭建
    定制RPM包
    会话保持
    Nginx负载均衡器+keepalived
    LAMP搭建配置
    KVM安装搭建
    安装PHP以及搭建博客(四)伪静态
    安装PHP以及搭建博客(三)服务迁移分离
    安装PHP以及搭建博客(二)
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12303561.html
Copyright © 2020-2023  润新知