贪心~

#include<bits/stdc++.h>
using namespace std;
const int maxn=;
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=;i<=n;i++) {
scanf("%d",&a[i]);
vis[a[i]]++;
if(vis[a[i]]>n/) flag=false;
s.insert(a[i]);
}
if(flag) {
for(int i=;i<=n;i++) {
it=s.begin();
if(*it==a[i]&&s.size()==) {
for(int j=i+;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]==) v1.push_back(j);
for(int j=i-;j>=;j--) {
if(vis[a[i]]==) 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=;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]==)
s.erase(*it);
}
}
for(int i=;i<=n;i++) va[a[i]].push_back(i),vb[a[i]].push_back(b[i]);
for(int i=;i<=n;i++) {
sort(va[a[i]].begin(),va[a[i]].end());
sort(vb[a[i]].begin(),vb[a[i]].end());
for(int j=;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=;i<=n;i++) printf(i==n?"%d\n":"%d ",b[i]);
}
else printf("Impossible\n");
for(int i=;i<=n;i++) vis[i]=,b[i]=;
s.clear();
}
return ;
}

ZOJ4102 Array in the Pocket(2019浙江省赛)的更多相关文章

  1. ZOJ4110 Strings in the Pocket(2019浙江省赛)

    给出两个字符串,询问有多少种反转方法可以使字符串1变成字符串2. 如果两个串相同,就用马拉车算法找回文串的数量~ 如果两个串不同,从前往后找第一个不同的位置l,从后往前找第二个不同的位置r,反转l和r ...

  2. ZOJ4104 Sequence in the Pocket(2019浙江省赛)

    思维~ #include<bits/stdc++.h> using namespace std; ; int a[maxn]; int b[maxn]; int N; int main ( ...

  3. 2019浙江省赛 Strings in the Pocket【manacher】

    Strings in the Pocket 题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6012 题意 给你两个字符 ...

  4. 2019浙江省赛K zoj4110 Strings in the Pocket(manachar)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6012 题意 给你两个串,可以翻转a串的一个区间,问有多少对l,r使得翻转后的a ...

  5. 2019浙江省赛B zoj4101 Element Swapping(推公式)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6003 题意 \(数组a通过交换一对数字,得到了b数组,给出x=\sum^n_{ ...

  6. ZOJ4109 Welcome Party(2019浙江省赛)

    并查集算连通块的数量,集合的个数就是必然不开心的人数,再跑bfs,用优先队列维护~ #include<bits/stdc++.h> using namespace std; ; vecto ...

  7. ZOJ4103 Traveler(2019浙江省赛)

    构造+思维~ #include<bits/stdc++.h> using namespace std; ; int N,M,T; int visit[maxn]; stack<int ...

  8. hdu6578 2019湖南省赛D题Modulo Nine 经典dp

    目录 题目 解析 AC_Code @ 题目 第一题题意是一共有{0,1,2,3}四种数字供选择,问有多少个长度为n的序列满足所有m个条件,每个条件是说区间[L,R]内必须有恰好x个不同的数字. 第二题 ...

  9. 浙江省赛C.Array in the Pocket(贪心+线段树)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4102 题意: 给出一个长度为n的数组,重排它们,让相同位置的数 ...

随机推荐

  1. 架构师必备技能指南:SaaS(软件即服务)架构设计

    1.介绍 从计算机诞生开始,就伴随着计算机应用程序的演变.简短的回顾历史,我们可以清楚的看到应用程序发生的巨大变化.上世纪70年代中期,随着个人PC机的爆炸式增长以及程序员的崛起,让计算机的计算能力得 ...

  2. js将后台传入得时间格式化

    //格式化时间函数Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月 ...

  3. 国际化支持、activity生命周期、屏幕翻转的ui适配

    国际化 对于手机的不同语言做出不同的语言描述,这里只是简单的提一下,实际上针对比较大型的项目,有可能不同的语言要做不同的ui适配. 例如下面:中文长度不长但是在德语中占据很长的位置,这个就要针对性的适 ...

  4. python web django 2nd level -- 待更新

    练习代码位置 实例代码位置 --> app: myblog Form 利用Form表单验证,自己写的html 思路: 新建一个类 LoginForm(forms.Form) 新建对象 obj = ...

  5. 喵星之旅-狂奔的兔子-centos7安装MySQL 5.5

    安装环境:https://www.cnblogs.com/kittybunny/p/12296078.html 一.下载安装文件 下载地址 https://downloads.mysql.com/ar ...

  6. dropLoad.js移动端分页----Vue数据每次清空累加

    dropLoad.js移动端使用 1.需要引入  dropload   必要的两个文件dropload.css .dropload.min.js 此案例在vue项目中使用过程: var vm = ne ...

  7. 【转载】巴塞尔问题(Basel Problem)的多种解法

    如何计算 \(\displaystyle \zeta \left ( 2 \right )=\frac{1}{1^{2}}+\frac{1}{2^{2}}+\frac{1}{3^{2}}+\cdots ...

  8. C语言:将字符串中的前导*号全部移到字符串的尾部。

    //规定输入的字符串中只包含字母和*号,fun函数:将字符串中的前导*号全部移到字符串的尾部. #include <stdio.h> void fun( char *a ) { ]; ch ...

  9. 兵贵神速!掌握这10个Python技巧,让你代码工作如鱼得水

    主题 Python 1000个读者心中有1000个哈姆雷特,要问1000个程序员“什么才是最好的语言”,Java.Python.PHP.C++ 也都有自己的位置.但要问编程语言流行指数之王非,那真的非 ...

  10. 喵星之旅-狂奔的兔子-redis使用

    一.命令行使用 redis大概有200多命令,这里只是入门级别,列举了一些非常常见的内容,如果这些会了就可以开启redis进一步学习了. 1.登录数据库 我们需要知道ip地址.端口号.密码(如果有). ...