ZOJ4102 Array in the Pocket(2019浙江省赛)
贪心~
#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浙江省赛)的更多相关文章
- ZOJ4110 Strings in the Pocket(2019浙江省赛)
给出两个字符串,询问有多少种反转方法可以使字符串1变成字符串2. 如果两个串相同,就用马拉车算法找回文串的数量~ 如果两个串不同,从前往后找第一个不同的位置l,从后往前找第二个不同的位置r,反转l和r ...
- ZOJ4104 Sequence in the Pocket(2019浙江省赛)
思维~ #include<bits/stdc++.h> using namespace std; ; int a[maxn]; int b[maxn]; int N; int main ( ...
- 2019浙江省赛 Strings in the Pocket【manacher】
Strings in the Pocket 题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6012 题意 给你两个字符 ...
- 2019浙江省赛K zoj4110 Strings in the Pocket(manachar)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6012 题意 给你两个串,可以翻转a串的一个区间,问有多少对l,r使得翻转后的a ...
- 2019浙江省赛B zoj4101 Element Swapping(推公式)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6003 题意 \(数组a通过交换一对数字,得到了b数组,给出x=\sum^n_{ ...
- ZOJ4109 Welcome Party(2019浙江省赛)
并查集算连通块的数量,集合的个数就是必然不开心的人数,再跑bfs,用优先队列维护~ #include<bits/stdc++.h> using namespace std; ; vecto ...
- ZOJ4103 Traveler(2019浙江省赛)
构造+思维~ #include<bits/stdc++.h> using namespace std; ; int N,M,T; int visit[maxn]; stack<int ...
- hdu6578 2019湖南省赛D题Modulo Nine 经典dp
目录 题目 解析 AC_Code @ 题目 第一题题意是一共有{0,1,2,3}四种数字供选择,问有多少个长度为n的序列满足所有m个条件,每个条件是说区间[L,R]内必须有恰好x个不同的数字. 第二题 ...
- 浙江省赛C.Array in the Pocket(贪心+线段树)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4102 题意: 给出一个长度为n的数组,重排它们,让相同位置的数 ...
随机推荐
- 非分页中的上一篇下一篇sql语句如何写
上一页:where id=(select max(id) from examination where id < #{id} and class=#{class}) 下一页:where id=( ...
- 【音乐欣赏】《PANTA RHEI》 - MYTH & ROID
曲名:PANTA RHEI 作者:MYTH & ROID [ti:PANTA RHEI (<异世界超能魔术师>TV动画片头曲)] [ar:MYTH & ROID] [al: ...
- Ubuntu 国内安装 kubernetes
由于墙的原因,国内要安装 kubernetes 非常的麻烦,因此只要解决这个问题,就可以顺利安装 kubernetes 的 三个官法工具 kubelet.kubeadm.kubectl. 安装环境: ...
- WordPress 安装教程
1.要安装WordPress,先看他的环境要求 2.环境符合后,直接去官网下载 WordPress(点击去官网) 下载最新的安装包 3.下载解压后,直接在浏览器中访问 会自动跳转到安装界面 http: ...
- [QT] QT5.12 HTTPS请求 TLS initialization failed
#前言 接触到了Qt的网络编程 然后尝试对一个http页面请求获取源码 是可以的 但是当对https界面发出请求的时候总是错误 TLC什么的初始化失败 百度也是没有结果 然后网上各种方法 比如说编译O ...
- 《实战Java高并发程序设计》读书笔记六
第六章 Java 8 与并发 1.函数式编程 函数作为一等公民: 将函数作为参数传递给另外一个函数这是函数式编程的特性之一. 函数可以作为另外一个函数的返回值,也是函数式编程的重要特点. 无副作用: ...
- IIS-反向代理简介
参考:https://www.williamlong.info/archives/5353.html 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后 ...
- Kosaraju's algorithm
推荐到我的这篇博客中看完整版的. 该算法用于求解有向图的强连通分量,也就是强连通子图的个数. 算法实现摘自Kosaraju's algorithm - 百度百科: #include <iostr ...
- try catch和if else
当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息.描述这种情况的技术术语是:JavaScript 将抛出一个错误. try 语句允许我们定义在执行时进行错误测试的 ...
- 大数据计算引擎之Flink Flink CEP复杂事件编程
原文地址: 大数据计算引擎之Flink Flink CEP复杂事件编程 复杂事件编程(CEP)是一种基于流处理的技术,将系统数据看作不同类型的事件,通过分析事件之间的关系,建立不同的时事件系序列库,并 ...