2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心
2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心

【Problem Description】
有\(k\)种颜色,给你\(n\)个区间段,选择一种合适的方案给每个区间段染色,使得最终染色次数等于\(k\)次的长度和最大。
【Solution】
将左右端点放在一起排序,但是标记出它是左端点,还是右端点,并且记录每个端点属于第几个区间,排序后,对于每个左端点,从未使用过的颜色中选一个染色此区间,若连续染色超过\(k\)次,则多于的区间放入栈中备用,当某次染色小于\(k\)次时拿出来染色。当遇到右端点时,若这段区间染过色,则将此颜色收回,若没染过色,随意染色即可。
最重要的,一定要按格式输出,末尾不能有空格
【Code】
/*
* @Author: _Simon_
* @Date: 2019-10-30 10:44:14
* @Last Modified by: Simon
* @Last Modified time: 2019-10-30 10:44:14
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 200005
#define INF 0x3f3f3f3f
struct node{
int first,second,ord;
node(){}
node(int first,int second,int ord):first(first),second(second),ord(ord){}
bool operator <(const node&a) const{
if(first==a.first) return second<a.second;
return first<a.first;
}
};
vector<node>a;
int ans[maxn];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int T;cin>>T;
while(T--){
memset(ans,0,sizeof(ans));
a.clear();
int n,k;cin>>n>>k;
for(int i=1;i<=n;i++){
int l,r;cin>>l>>r;
a.push_back({l,1,i});
a.push_back({r,-1,i});
}
sort(a.begin(),a.end());
queue<int>q;stack<int>st;
for(int i=1;i<=k;i++) q.push(i);
int tmp=0,pret=0,preidx=0;
for(int i=0;i<a.size();i++){
if(a[i].second>0){ //左端点
if(tmp<k){ //连续染色小于k次
tmp++;
ans[a[i].ord]=q.front();q.pop(); //从未染色的颜色中选出一个染色
}else{
st.push(a[i].ord); //染色大于k次,备用
}
}else{ //右端点
if(ans[a[i].ord]){ //若所在区间染过色
q.push(ans[a[i].ord]); //收回颜色
tmp--;
}else{
ans[a[i].ord]=1; //否则随意染色
}
}
if(i+1<a.size()&&a[i].first==a[i+1].first) continue; //同样端点一起处理
while(tmp<k){ //若染色小于k次,从备用端点中选取
while(!st.empty()&&ans[st.top()]) st.pop();
if(st.empty()) break;
tmp++;
ans[st.top()]=q.front();st.pop();q.pop();
}
if(pret>=k) ans[0]+=a[i].first-preidx; //计算染色次数等于k次的长度
preidx=a[i].first;pret=tmp;
}
cout<<ans[0]<<endl;
for(int i=1;i<=n;i++) cout<<ans[i]<<" \n"[i==n]; //按格式输出
}
return 0;
}
2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心的更多相关文章
- The 2019 ICPC Asia Shanghai Regional Contest H Tree Partition k、Color Graph
H题意: 给你一个n个节点n-1条无向边构成的树,每一个节点有一个权值wi,你需要把这棵树划分成k个子树,每一个子树的权值是这棵子树上所有节点权值之和. 你要输出这k棵子树的权值中那个最大的.你需要让 ...
- 2019-2020 ICPC, Asia Jakarta Regional Contest H. Twin Buildings
As you might already know, space has always been a problem in ICPC Jakarta. To cope with this, ICPC ...
- ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków
ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...
- 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)
2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...
- 2019 ICPC Asia Xuzhou Regional
目录 Contest Info Solutions A. Cat B. Cats line up C. <3 numbers E. Multiply F. The Answer to the U ...
- 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K
传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...
- 2018 ICPC Asia Jakarta Regional Contest
题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 . : 待补 A. Edit Distance Thin ...
- Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机
题面 题意:给你1个20*20的格子图,有的是障碍有的是怪,你可以每次指定上下左右的方向,然后所有怪都会向那个方向走, 如果2个怪撞上了,就融合在一起,让你给不超过5w步,让所有怪都融合 题解:我们可 ...
- Gym - 101981M The 2018 ICPC Asia Nanjing Regional Contest M.Mediocre String Problem Manacher+扩增KMP
题面 题意:给你2个串(长度1e6),在第一个串里找“s1s2s3”,第二个串里找“s4”,拼接后,是一个回文串,求方案数 题解:知道s1和s4回文,s2和s3回文,所以我们枚举s1的右端点,s1的长 ...
随机推荐
- Python浮点数数据精度控制
代码 import decimal from decimal import Decimal, getcontext if __name__ == '__main__': decimal.getcont ...
- APT33追踪思路
APT33组织主要针对石油和航空业,这个组织使用了大约十二个命令与控制服务器(C&C)针对性的对目标攻击.APT33也一直在做定点针对性攻击.比如近两年来,该组织利用一位欧洲高级政治人物(该国 ...
- Idea开发环境中,开发springboot类型的项目,如果只引入parent节点,不添加依赖节点,maven是不会加载springboot的任何依赖的
在SpringBoot类型的项目中,我本来是要使用pringBoot,创建一个Console项目,我原本在pom.xml中添加paren节点了,天真的认为不需要再添加其他任何依赖了,可是接下来的1个小 ...
- python之 小甲鱼教程 Easygui 篇
博客转自 https://blog.csdn.net/bestallen/article/details/51933427 终于有点实质性可以看到摸到的界面了,搜了一下虽然easygui用的不多,但是 ...
- 深入Vue响应式原理
深入Vue.js响应式原理 一.创建一个Vue应用 new Vue({ data() { return { name: 'yjh', }; }, router, store, render: h =& ...
- 【Python爬虫案例学习】Python爬取淘宝店铺和评论
安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动sel ...
- arm-linux-系列工具,ld,ar,as,objcopy
ref :http://www.360doc.com/content/14/0509/09/17268421_376009916.shtml 一.编译器相关知识学习 GNU GCC简介: GNU GC ...
- Django使用distinct报错:DISTINCT ON fields is not supported by this database backend
具体错误提示是:django.db.utils.NotSupportedError: DISTINCT ON fields is not supported by this database back ...
- Selenium+Java(七)Selenium对话框的处理
HTML代码如图所示: 一.alert String url = "file:///C:/Users/ex_yuhao/Desktop/index.html"; //引用IE浏览器 ...
- java之spring之helloword
这篇文章主要讲 spring的基础的使用案例 项目整体目录结构: 1.新建一个java项目:spring_helloworld 2.在项目下创建一个lib文件夹,并把一些必须的jar包复制过去 新建l ...