首页 > 其他分享 >P3528 PAT-Sticks(2022.10.2)

P3528 PAT-Sticks(2022.10.2)

时间:2022-10-04 20:56:24浏览次数:87  
标签:三根 ch PAT Sticks len long 木棍 颜色 2022.10

题目描述:戳这里

题目大意:

①给你k种颜色木棍,每种木棍个数不一样。

②找出三根颜色不一样的木棍组成三角形。

③如果可以输出方案,不能输出"NIE"。

思路:

遇事不决先看数据范围

最多有50种颜色,而有1e6的木棍。

zhx曾经说过如果题目中出现奇怪的数据范围要着重思考

于是这个颜色的个数就很可疑

下面从颜色开始入手

如果不考虑不同种颜色,那么按长度排序,如果有解的话,那么一定有一组解,三根木棍是连续的,且长度是相近的,直接找相邻的三根木棍判断是否能构成三角形即可

那么如果考虑同种颜色,只需要对于每种颜色开一个大根堆

把每种颜色的木棍丢进去

单独开一个大根堆,把每种颜色长度最大的木棍丢进去

①每次取出最长的三根木棍

②如果可以组成则输出

③如果当前的三根不能组成三角形则把最长的一根丢掉,因为不可能有其他的组合和它构成三角形,把剩下的两根丢回堆中。

④看看与之前那个最长的相同颜色的堆中还有没有其他的,如果有就丢入新的堆中。

⑤重复上面步骤,直至新的堆中元素不能构成三角形,输出无解

具体细节看代码

下面是贴心的代码

/*

     />    フ
     |  _  _|
     /`ミ _x 彡
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ

*/
#include<bits/stdc++.h>
using namespace std;

struct node{
	int col,len;//颜色,长度 
	bool operator < (const node &T) const {
    return len < T.len;
}
};


priority_queue<node> q[55];
priority_queue<node> a;//单独开的大根堆,保证里面的木棍颜色不一样 

long long read()
{
	long long x = 0, f = 1; char ch = getchar();
	while(ch < '0' || ch > '9'){if(ch == '-') f = -1; ch = getchar();}
	while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar();}
	return x * f;
}

int n;

bool check(node a, node b, node c)//判断是否能构成三角形 
{
	if(a.len + b.len > c.len && a.len - b.len < c.len) return true;
	else return false;
}

int main()
{
	n = read();
	for(int i = 1; i <= n; i++)
	{
		int x = read();
		for(int j = 1; j <= x; j++)
		{
			int y = read();
			q[i].push((node){i, y});
		}
	}
	
	//根据思路大模拟 
	 
	for(int i = 1; i <= n; i++) 
	{
		if(!q[i].empty())
		{
			a.push(q[i].top());	
			q[i].pop();
		}
	}

	//找最长的三根 

	while(!a.empty())
	{
		node x = a.top();//取出三根 
		a.pop();
		node y = a.top();
		a.pop();
		node z = a.top();
		a.pop();
		if(check(x, y, z))//能构成三角形 
		{
			cout << x.col << " " << x.len << " ";
			cout << y.col << " " << y.len << " ";
			cout << z.col << " " << z.len;
			return 0;
		}
		else//不能构成三角形 
		{
			a.push(y); 
			a.push(z);
			if(!q[x.col].empty())
			{
				a.push(q[x.col].top());
				q[x.col].pop();
			}
		}
		if(a.size() < 3)//如果小于三根则不能构成三角形 
		{
			cout << "NIE" << endl;
			return 0;
		}
	}
	
	return 0;
}

标签:三根,ch,PAT,Sticks,len,long,木棍,颜色,2022.10
From: https://www.cnblogs.com/Han-han-/p/16754439.html

相关文章

  • 2022.10.4
    考试,大概7、8名,基本是按流程来的了。还是有些问题,感觉很多题莫名奇妙没转过弯,拿了很高的部分分但距离正解还有距离。CF做少了QaQTodo:考试,改题(至少前三道)。把CF的E题和......
  • 2022.10.04考试总结
    2022.10.04考试总结得分:\(110/300\)总结:今天的第一题比较简单,第二题因为看错题意并且思考了比较长的时间导致爆零,第三题在考场上没有一个比较完整并且容易实现的思路题......
  • 2022.10.4什么是计算机随笔
    什么是计算机冯诺依曼被称为计算机之父computer俗称电子计算机、电脑计算机分硬件和软件计算机广泛应用在人工智能、网络安全、科学计算、数据处理、自动......
  • 2022.10.4markdown随笔
    Markdowm学习标题三级标题四级标题 字体helloworldhelloworldhelloworldhelloworld引用选择坚持,留住明天!分割线图片超链接点击跳转到哔哩哔哩列表......
  • CSharp: Factory Method Pattern in donet core 3
     #regionAnimalHierarchy/**BoththeDogandTigerclasseswill*implementtheIAnimalinterfacemethod.*////<summary>......
  • Test 2022.10.04
    应该仍然是\(SHOI\)专场只写了两篇题解,另外两道题都有些超出知识范围了,当然第四题可以学一学改一改。T1门票一道链表哈希,理论\(map\)也能过,但是常数太大了,还是不足以过......
  • xpath语法基本使用
    fromlxmlimportetree"""lxml是html(超文本标记语言,显示数据)和xml(可扩展标记语言,传输和存储数据)文档的解析器,当我们使用需要用到css选择器或xpath来获取数据时......
  • 2022.10.4 - mac安装homebrew
    因为网络的问题,所以用国内源;有个大佬写好了自动下载脚本:https://gitee.com/cunkai/HomebrewCN按照文档选择镜像下载安装就OK;安装是安装好了,但是下载的时候会出现:Comman......
  • GOPATH的配置(WIN)
    配置GOPATH环境变量project文件夹在project文件夹新建3个文件夹src存放go语言源码pkg存放编译好的包对象文件bin存放链接好的可执行文件新建项目在src文件夹......
  • python jsonpath 替换json 指定字段
    1. pass 2.  pass......