bzoj千题计划249:bzoj5100: [POI2018]Plan metra
http://www.lydsy.com/JudgeOnline/problem.php?id=5100
1、找到d1[i]+dn[i] 最小的点,作为1到n链上的点
2、令链长为D,若abs(d1[i]-dn[i])==D,则 i 与1或n 连边
3、对于链上除去1和n的点k,若 dn[i]-d1[i]==dn[k]-d1[k],则i与k连边
若1到n的链上没有点,即1与n直接相连,那么所有的d1[i]-dn[i] 相等 且 不为 0
特判n=2,输出1 2 任意长度[1,1e6]
无解的情况:
1、找出的链上的点,存在两个点i,j,d1[i]==d1[j]
2、对于某个点i,找不到对应的点k
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 500001
#define M 1000001 int dis1[N],disn[N];
int cnt[M<<]; int chain[N]; bool vis[N]; struct node1
{
int id,d,bl;
}e[N];
struct node2
{
int id,d;
}g[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} bool cmp(int p,int q)
{
return dis1[p]<dis1[q];
} bool cmp2(node1 p,node1 q)
{
return p.d<q.d;
} bool cmp3(node2 p,node2 q)
{
return p.d<q.d;
} int main()
{
//freopen("test.in","r",stdin);
//freopen("my.out","w",stdout);
int n;
read(n);
if(n==)
{
printf("TAK\n1 2 1");
return ;
}
for(int i=;i<n;++i) read(dis1[i]);
for(int i=;i<n;++i) read(disn[i]);
int sta=abs(dis1[]-disn[]);
bool tag=true;
for(int i=;i<n && tag;++i)
if(abs(dis1[i]-disn[i])!=sta) tag=false;
if(tag && sta)
{
puts("TAK");
printf("1 %d %d\n",n,sta);
for(int i=;i<n;++i)
if(dis1[i]>disn[i]) printf("%d %d %d\n",n,i,dis1[i]-sta);
else printf("1 %d %d\n",i,disn[i]-sta);
return ;
}
int mid=;
dis1[]=1e7;
for(int i=;i<n;++i)
if(dis1[i]+disn[i]<dis1[mid]+disn[mid]) mid=i;
int D=dis1[mid]+disn[mid];
int m=;
for(int i=;i<n;++i)
if(dis1[i]+disn[i]==D) chain[++m]=i,vis[i]=true;
sort(chain+,chain+m+,cmp);
for(int i=;i<m;++i)
if(dis1[chain[i]]==dis1[chain[i+]])
{
printf("NIE");
return ;
}
for(int i=;i<=m;++i)
{
g[i].id=chain[i];
g[i].d=disn[chain[i]]-dis1[chain[i]];
}
sort(g+,g+m+,cmp3);
int tot=;
for(int i=;i<n;++i)
if(!vis[i])
{
e[++tot].id=i;
e[tot].d=disn[i]-dis1[i];
}
sort(e+,e+tot+,cmp2);
int now=;
for(int i=;i<=tot;++i)
{
if(abs(dis1[e[i].id]-disn[e[i].id])==D) continue;
if(now>m)
{
puts("NIE");
return ;
}
if(e[i].d<g[now].d)
{
puts("NIE");
return ;
}
else if(e[i].d==g[now].d) e[i].bl=g[now].id;
else
{
while(now<=m && e[i].d>g[now].d) now++;
i--;
}
}
// return 0;
puts("TAK");
printf("1 %d %d\n",chain[],dis1[chain[]]);
for(int i=;i<=m;++i) printf("%d %d %d\n",chain[i-],chain[i],dis1[chain[i]]-dis1[chain[i-]]);
printf("%d %d %d\n",chain[m],n,disn[chain[m]]);
for(int i=;i<n;++i)
if(dis1[i]-disn[i]==D)
{
vis[i]=true;
printf("%d %d %d\n",n,i,disn[i]);
}
else if(disn[i]-dis1[i]==D)
{
vis[i]=true;
printf("1 %d %d\n",i,dis1[i]);
}
for(int i=;i<=tot;++i)
if(!vis[e[i].id]) printf("%d %d %d\n",e[i].bl,e[i].id,dis1[e[i].id]-dis1[e[i].bl]);
return ;
}
5100: [POI2018]Plan metra
Time Limit: 40 Sec  Memory Limit: 128 MBSec  Special Judge
Submit: 277  Solved: 69
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
6 6 2 2 1
5 3 5 1 4
Sample Output
1 5 2
5 7 1
5 2 4
7 3 3
1 4 2
1 6 1
bzoj千题计划249:bzoj5100: [POI2018]Plan metra的更多相关文章
- bzoj5100 [POI2018]Plan metra 构造
		
5100: [POI2018]Plan metra Time Limit: 40 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 189 Sol ...
 - bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
		
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
 - bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
		
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
 - bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
		
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
 - bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
 - bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
		
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
 - bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
		
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
 - bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
		
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
 - bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
		
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
 
随机推荐
- stl源码剖析 详细学习笔记 算法(5)
			
//---------------------------15/04/01---------------------------- //inplace_merge(要求有序) template< ...
 - HTML 表格实例
			
1.表格这个例子演示如何在 HTML 文档中创建表格. <p>每个表格由 table 标签开始.</p><p>每个表格行由 tr 标签开始.</p>&l ...
 - Scrapy框架中的CrawlSpider
			
小思考:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二: ...
 - Spring学习总结之高级装配
			
1. profile profile可以决定bean在什么环境下才被装配(开发环境.测试环境.线上环境等) @Profile(“dev”)可以用在class之前,也可以用在类之前(Spring3.2 ...
 - win7+opencv3.0.0+vs2010 安装及配置
			
最近看<学习opencv>,想要跑人脸识别的例子,于是先配环境吧. 1. opencv下载: 具体下载地址,http://opencv.org/,官网太慢,百度网盘的资源链接:http: ...
 - FASIC: A Fast-recovery, Adaptively Spanning In-band Control Plane in Software-Defined Network
			
2017 IEEE Global Communications Conference 问题:in-band网络中如果物理链路阻塞或者硬件故障,导致控制器的消息不能及时到达各个交换机导致网络不一致甚至某 ...
 - THE LAST ONE!!   2017《面向对象程序设计》课程作业八
			
THE LAST ONE!! 2017<面向对象程序设计>课程作业八 031602230 卢恺翔 GitHub传送门 题目描述 1.时间匆匆,本学期的博客作业就要结束了,是否有点不舍,是否 ...
 - 实现文字左右滚动 javascript
			
参考链接:http://www.86y.org/art_detail.aspx?id=587 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1 ...
 - 团队作业四-WBS练习
			
我们团队开发的是四则运算,主要面对的用户是小学生.老师及学生家长.经过我们组成员的讨论和结合实际及自身能力,对团队成员分配任务,队长负责全局工作主要负责任务,统一进度,和适量的编码,露哥和阮磊主要负责 ...
 - pandas读取csv数据时设置index
			
比如读取数据时想把第一列设为index,那么只需要简单的 pd.read_csv("new_wordvecter.csv",index_col=[0]) 这里index_col可以 ...