P3528 [POI2011]PAT-Sticks
题目概述
题目描述
给出若干木棍,每根木棍有特定的颜色和长度。问能否找到三条颜色不同的木棍构成一个三角形。 (注意这里所说的三角形面积要严格大于\(0\))
输入格式
第一行给出一个整数\(k\),表示颜色的种数。这k种颜色被标号为\(1\)至\(k\)。
接下来\(k\)行,第\(i+1\)描述颜色为\(i\)的木棍的信息。 首先一个整数\(N_i\)表示颜色为\(i\)的木棍的数量。
接下来\(N_i\)个整数,表示这\(N_i\)根木棍各自的长度。
输出格式
你的程序应该仅输出一行 如果有解,输出\(6\)个整数.
分别表示第一条边的颜色,第一条边的长度,第二条边的颜色,第二条边的长度, 第三条边的颜色,第三条边的长度.
这六个整数以空格分割。
如果有多组解,随便输出一组即可。
如果无解,输出\(NIE\)
样例输入
4 1 42
2 6 9
3 8 4 8
1 12
样例输出
3 8 2 9 4 12
数据范围
\]
算法解析
题意理解
要你选择三根木棒,要求这三根木棒,颜色不同,而且可以构成三角形.
算法解析
这种题目,数据范围又大,而且只要找到任意一种合法方案,不难想到是贪心之类的乱搞算法.
首先,提取木棒信息.
- 长度
- 颜色
而且,在这里,长度显然是,第一关键字,因为首先要先构成三角形.
因此,我们不妨,先将,所有木棒都按长度排序
排好序后,我们发现,我们只需要在这个,木棒序列里面,找到三个不同颜色的数字
\]
因为知道.
\]
那么显然,最有可能的一组就是.
\]
因此此时,他们最有可能
\]
因此我们不妨设置如下贪心.
每次保存当前,三根颜色不同的前三大木棒
举个例子.
\]
那么假如说,我们当前在序列最后一位,则
\]
为什么是存储前三根颜色不同的木棒,而不是前两根.
因为长度排好序了,那么最大的木棒,一定就是当前这根木棒.
代码解析
#include <bits/stdc++.h>
const int N=1000010;
using namespace std;
int n,t,tot,s1,s2,s3;
struct node
{
int c,l;
} a[N];
int cmp(node a,node b)
{
return a.l<b.l;
}
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&t);
while(t--)
{
a[++tot].c=i;
scanf("%d",&a[tot].l);
}
}
sort(a+1,a+1+tot,cmp);
//s1为第一长木棒,s2为第二长,s3为第三长
for(int i=1; i<=tot; i++)
{
if(a[i].c==a[s1].c)//和最长的颜色相同,则原来最长的,变成了这根木棒
{
if(a[s3].l+a[s2].l>a[i].l)
{
printf("%d %d %d %d %d %d\n",a[s3].c,a[s3].l,a[s2].c,a[s2].l,a[i].c,a[i].l);
return 0;
}
s1=i;//最长的变了
}
else if(a[i].c==a[s2].c)//和次长的颜色相同
{
if(a[s3].l+a[s1].l>a[i].l)
{
printf("%d %d %d %d %d %d\n",a[s3].c,a[s3].l,a[s1].c,a[s1].l,a[i].c,a[i].l);
return 0;
}
s2=s1,s1=i;//原来最长的,成为现在次长的,同时最长的,改成这根木棒
}
else//和最短的颜色相同,切记这里最短是,相比较其他两根
{
if(a[s2].l+a[s1].l>a[i].l)
{
printf("%d %d %d %d %d %d\n",a[s2].c,a[s2].l,a[s1].c,a[s1].l,a[i].c,a[i].l);
return 0;
}
s3=s2,s2=s1,s1=i;//次长的成为最短,最长的成为了次长,最短成为了最长
}
}
puts("NIE");
return 0;
}
P3528 [POI2011]PAT-Sticks的更多相关文章
- BZOJ2529: [Poi2011]Sticks
2529: [Poi2011]Sticks Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 257 Solved: ...
- LOJ#2170. 「POI2011」木棍 Sticks
题目链接 题意就是给你一堆线段,然后线段有长度和颜色,让你选三条组成一个三角形,这三条线段颜色不能一样 题解: 做法:贪心 首先按照长度给这些线段排序一遍 然后贪心的去选,对于已经选出来同种颜色的,就 ...
- BZOJ2529 [Poi2011]Sticks 【贪心】
题目链接 BZOJ2529 题解 要组成三角形,当且仅当最长边长度小于另两条边之和 我们就枚举最长边,另两条边当然是越大越好 我们将所有边排序,从小枚举并记录各个颜色的最长边 当枚举到当前边时,找到除 ...
- 【bzoj2529】[Poi2011]Sticks 贪心
题目描述 给出若干木棍,每根木棍有特定的颜色和长度.问能否找到三条颜色不同的木棍构成一个三角形.(注意这里所说的三角形面积要严格大于0) 输入 第一行给出一个整数k(3<=k<=50),表 ...
- BZOJ_2529_[Poi2011]Sticks_贪心
BZOJ_2529_[Poi2011]Sticks_贪心 Description Little Johnny was given a birthday present by his grandpare ...
- POI2011题解
POI2011题解 2214先咕一会... [BZOJ2212][POI2011]Tree Rotations 线段树合并模板题. #include<cstdio> #include< ...
- [bzoj2529][Poi2011]Sticks_贪心
Sticks bzoj-2529 Poi-2011 题目大意:给你n根木棒,每种木棒有长度和颜色,颜色共有k种,求满足条件的3根木棒使得这3根木棒颜色互不相同且可以围成三角形. 注释:$1\le n ...
- 《转载》PAT 习题
博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
随机推荐
- 常用的linux命令选项
-a 显示所有对象 -c 生成一个计数 -d 制定一个目录 -e 扩展一个对象 -f 指定读入数据的文件 -h 显示命令的帮助信息 -i 忽略文本大小写 -l 产生输出的成格式版本 -n 使用非交互模 ...
- codevs 3031:最富有的人
题目描述 Description 在你的面前有n堆金子,你只能取走其中的两堆,且总价值为这两堆金子的xor值,你想成为最富有的人,你就要有所选择. 输入描述 Input Description 第一行 ...
- H3C 交换机配置ssh登陆
1.开启ssh服务,创建密钥. <D05-S5048-02>system-view [D05-S5048-02]ssh server enable //开启ssh服务 [D05-S5048 ...
- Linux Shell中的变量声明和一些特殊变量
在SHELL中定义变量比较直接,无类型区别,不需要像Java那样定义好是String还是int等. 声明变量需要遵守或者注意的几点: 变量名和等号之间不能有空格. 变量名首字符必须为字母. 变量名里可 ...
- oracle中表记录被另一个用户锁住
应用场景 在查询oracle表时,提示表记录被另一个用户锁住了 有可能是在使用了pl/sql工具后修改某个表记录时,加锁,或者发生故障异常退出,下次登录进去修改不了 查询锁 --查看数据库的锁的来源. ...
- python — 函数基础知识(一)
目录 1 面向过程编程与函数式编程 2 函数的基本结构 3 函数的参数 1 面向过程编程与函数式编程 截至目前我们所接触.所写的编程为:面向过程式编程[可读性差/可重用性差] # 面向过程编程 use ...
- 分享一些JVM常见的面试题(转)
出处: 分享一些JVM常见的面试题 前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 ...
- 第十一章 ZYNQ-MIZ702 DDR3 PS读写操作方案
本编文章的目的主要用简明的方法在纯PS里对DDR3进行读写. 本文所使用的开发板是Miz702 PC 开发环境版本:Vivado 2015.4 Xilinx SDK 2015.4 11.0本章难度 ...
- 【树上异或和计数】czr 太弱啦
[题目]: 给一棵树,求异或和为k的路径个数. [题解]: 很遗憾比赛时做不出来,后来看别人题解做出来的.用于记录博客所用. 然后进行Dfs,得到从根节点到某一个节点的异或值,计算方案时只需要在map ...
- 手动部署k8s-prometheus
简介 Prometheus 最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目. ...