【2012百度之星/初赛上】A:度度熊就是要第一个出场

【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因? 一、录音播放数据处理过程介绍 (1)TX方向 麦克风(硅麦克风或者主机体麦克风)采集模拟音频信号,经过内部CODEC芯片中的adc转换为数字信号,在经过高通音频DSP处理音效后编码为wav/aac/amr/mp3等格式文件。 (2)RX方向 音频文件经过解码、重采样还原为pcm数据,经过DSP处理音效后送到内部CODEC,然后经过DAC转换为模拟信号,送到喇叭。 二、分析步骤 1... 阅读详情

描述:Baidu年会安排了一场时装秀节目。N名员工将依次身穿盛装上台表演。表演的顺序是通过一种“画线”抽签的方式决定的。

首先,员工们在一张白纸上画下N条平行的竖线。在竖线的上方从左到右依次写下1至N代表员工的编号;在竖线的下方也从左到右依次写下1至N代表出场表演的次序。

接着,员工们随意在两条相邻的竖线间添加垂直于竖线的横线段。

最后,每位员工的出场顺序是按如下规则决定的:每位员工从自己的编号开始用手指沿竖线向下划,每当遇到横线就沿横线移动到相邻的竖线上去,直到手指到达竖线下方的出场次序编号。这时手指指向的编号就是该员工的出场次序。例如在下图的例子中,度度熊将第二名出场,第一名出场的是员工4。

员工在画横线时,会避免在同一位置重复画线,并且避免两条相邻的横线连在一起。即下图所示的情况是不会出现的:

给定一种画线的方案,员工编号为K的度度熊想知道自己是不是第一位出场表演的。如果不是,度度熊想知道自己能不能通过增加一条横线段来使得自己变成第一位出场表演。

输入

为了描述方便,我们规定写有员工编号的方向是y轴正方向(即上文中的竖线上方),写有出场次序的方向是y轴负方向(即上文中的竖线下方)。竖线沿x轴方向(即上文中从左到右)依次编号1至N。于是,每条横线的位置都可以由一个三元组<xl, xr, y>确定,其中xl, xr是横线左右两个端点所在竖线的编号,y是横线的高度。

输入第一行是一个整数T(T <= 50),代表测试数据的组数。

每组数据的第一行包含三个整数N, M,K( 1<=N<=100, 0<=M<=1000, 1<=K<=N),分别代表参与表演的员工人数、画下的横线数目以及度度熊的员工编号。

每组数据的第2~M+1行每行包含3个整数, xl, xr, y, (1 <= xl < N, xr = xl + 1, 0 <= y <= 1,000,000),描述了一条横线的位置。

输出

对于每组数据输出一行Yes或者No,表示度度熊能否通过增加一条横线段来使得自己变成第一位出场表演。如果度度熊已经是第一位出场表演,也输出Yes。注意,尽管输入数据中员工画的横线高度都是整数,但是度度熊可以在任意实数高度画横线。此外,度度熊和员工一样,在画横线时需要避免在同一位置重复画线,也要避免两条相邻的横线连在一起。

样例输入

2

4 6 3

1 2 1

1 2 4

1 2 6

2 3 2

2 3 5

3 4 4

4 0 3

样例输出

Yes

No

代码1:
/*
度度熊就是要第一个出场
* 程序未检测输入数据的合法性
*/
#include<iostream>
#include<map>
#include<vector>
#include<climits>
#include<string>
#include<set>
using namespace std;

int ComputeRank(map<int, map<double, int> > &line_map, int k)
{
	// 判定是否已经是第一个出场
	int num = k;
	map<int, map<double, int> >::iterator iter = line_map.find(num);
	if(iter==line_map.end())
	{
		return num;
	}
	double y = INT_MAX;

	while(true)
	{
		map<double, int>::iterator iter2 = iter->second.begin();
		for(; iter2!=iter->second.end(); ++iter2)
		{
			if(iter2->first < y)
			{
				break;
			}
		}
		if(iter2!=iter->second.end())
		{
			y = iter2->first;
			num = iter2->second;
		}
		else
		{
			return num;
		}

		iter = line_map.find(num);
	}

	return num;
}

bool CanBeFirst(map<int, map<double, int> > &line_map, int k, int n, set<double, greater<int> > &allY)
{
	// 判定是否已经是第一个出场
	int rank = ComputeRank(line_map, k);
	if(rank == 1)
	{
		return true;
	}

	// 如果不是,则添加横线,再判断能否第一个出场
	set<double, greater<int> >::iterator iterY = allY.begin();
	double test = *iterY + 1;

	do
	{
		if(k>1)
		{
			map<int, map<double, int> > tMap = line_map;
			map<int, map<double, int> >::iterator tmpIter = tMap.find(k);
			if(tmpIter == tMap.end())
			{
				map<double, int> tMap1;
				tMap1.insert(make_pair(test, k-1) );
				tMap.insert(make_pair(k, tMap1) );
			}
			else
			{
				tmpIter->second.insert(make_pair(test, k-1));
			}

			rank = ComputeRank(line_map, k);
			if(rank == 1)
			{
				return true;
			}
		}

		if(k<n)
		{
			map<int, map<double, int> > tMap = line_map;
			map<int, map<double, int> >::iterator tmpIter = tMap.find(k);

			if(tmpIter == tMap.end())
			{
				map<double, int> tMap1;
				tMap1.insert(make_pair(test, k+1) );
				tMap.insert(make_pair(k, tMap1) );
			}
			else
			{
				tmpIter->second.insert(make_pair(test, k+1));
			}

			rank = ComputeRank(line_map, k);
			if(rank == 1)
			{
				return true;
			}
		}

		if(iterY == allY.end())
		{
			break;
		}

		test = *iterY;
		++iterY;
		if(iterY == allY.end())
		{
			test -= 1;
		}
		else
		{
			test += *iterY;
			test /=2;
		}

	}while(true);

	return false;
}

int main(void)
{
	int i , t , xl, xr, y , n , m , k;
	cin>>t;

	for(i = 0 ; i < t ; ++i)
	{
		// line_map存放(xl, (y,xr)) 和 (xr, (y,xl))
		map<int, map<double, int> > line_map;
		// allY存放各种可能的高度
		set<double, greater<int> > allY;
		cin>>n>>m>>k;
		if(!m)
		{
			puts("No");
			continue;
		}
		while(m--)
		{
			cin>>xl>>xr>>y;
			allY.insert(y);

			map<int, map<double, int> >::iterator iter;
			iter=line_map.find(xl);
			if(iter!=line_map.end())
			{
				iter->second.insert(make_pair(y, xr));
			}
			else
			{
				map<double, int> tmp;
				tmp.insert(make_pair(y, xr));
				line_map.insert(make_pair(xl, tmp) );
			}

			iter=line_map.find(xr);
			if(iter!=line_map.end())
			{
				iter->second.insert(make_pair(y, xl));
			}
			else
			{
				map<double, int> tmp;
				tmp.insert(make_pair(y, xl));
				line_map.insert(make_pair(xr, tmp) );
			}

		}
		if(CanBeFirst(line_map, k, m, allY) )
			puts("Yes");
		else
			puts("No");
	}
	return 0;
}
代码2:
/*
1、从下向上,找第一名的路径,把横线段做标记1,没有横线段的地方添加横线段出来,标记2
2、从上向下,找第k名(即度度熊的位置)的路径,遇到有标记的即表示本身就是第一(标记1),或加线段后可以是第一(标记2)
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

typedef struct line
{
    int xl;
    int xr;
    int y;
    int path;
}line;

//升序排序,是"<",降序排列是">"号
bool cmp(line a,line b)
{
    return a.y<b.y;
}

int main(void)
{
    int t , i , j , tag , n , m , k , max3 , noline;
    cin>>t;
    while (t--)
    {
        tag = max3 = noline = 0;//员工数,线段树,度度熊的位置
        cin>>n>>m>>k;
        int tmpK = k;

        vector<line> array;    //M条线段
        line lin;
        for(i = 0 ; i < m ; ++i)
        {
            cin>>lin.xl>>lin.xr>>lin.y;
            lin.path = 0;
            array.push_back(lin);
        }

        //按线段高低降序排列按线段高低降序排列
        sort(array.begin(),array.end(),cmp);

        //从下向上,找第一名的路线,线段path标记为1
        int firstpath = 1;
        int preelem3;
        preelem3 = 0;
        for(i = 0 ; i < m ; ++i)
        {
            max3 = max3 > array[i].y ? max3 : array[i].y;
            if (array[i].xl==firstpath || array[i].xr==firstpath)
            {
                ++noline;
                //与上一个高度差
                if(array[i].y > preelem3+1)
                {
                    for (j = array[i].y-1 ; j > preelem3 ; --j)
                    {
                        lin.xl = firstpath;
                        lin.xr = firstpath+1;
                        lin.y = j;
                        lin.path = 2;
                        array.push_back(lin);       //往右添加横线

                        lin.xl = firstpath-1;
                        lin.xr = firstpath;
                        array.push_back(lin);    //往左添加横线
                    }
                }
                //主轴移动到旁边一个轴上
                firstpath = array[i].xl==firstpath ? array[i].xr : array[i].xl;
                array[i].path = 1;
                preelem3 = array[i].y;
            }
        }
        if(noline==0)
        {
            for(j = 0 ; j < max3 + 1 ; ++j)
            {
                lin.xl = 1;
                lin.xr = 2;
                lin.y = j;
                lin.path = 2;
                array.push_back(lin);      //往右添加横线
            }
        }
        //在主轴最大值上向左右加横线
        for(i = preelem3 + 1 ; i <= max3+1 ; ++i)
        {
            lin.xl = firstpath;
            lin.xr = firstpath+1;
            lin.y = i;
            lin.path = 2;
            array.push_back(lin);      //往右添加横线

            lin.xl = firstpath-1;
            lin.xr = firstpath;
            array.push_back(lin);      //往左添加横线
        }

        //稳定排序,使固有线段在后加线段之前
        stable_sort(array.begin(),array.end(),cmp);

        //从上向下,找度度熊的路线,看能否遇到有标记的线段
        preelem3 = 1000000;
        for (i = array.size()-1 ; i >= 0 ; --i)
        {
            if ( (array[i].xr!=preelem3) && (array[i].xl==tmpK || array[i].xr==tmpK) )
            {
                if (array[i].path>0)//线段标有1,表示度度熊本身就是第一; 是2表示可以通过加一个线段变为第一
                {
                    tag++;
                }
                tmpK = array[i].xl == tmpK ? array[i].xr : array[i].xl;
                preelem3 = array[i].y;
            }
        }
        if(tag>0) //tag>0表示可以通过加线段改为第一,tag的值表示可添加线段的位置的个数
            puts("Yes");
        else
            puts("No");
    }
    return 0;
}

/*
2
4 7 3
1 2 12
1 2 2
2 3 11
2 3 9
3 4 10
3 4 8
3 4 7
Yes
4 0 3
No
*/





从零构建eSIM RSP服务:云原生架构与GSMA合规实践 本文详细阐述了从零开始构建一个符合GSMA SAS-SM安全标准的云原生eSIM RSP服务的完整路径。内容涵盖云原生基础设施选型、容器化部署、GSMA标准接口集成,并重点分享了通过SAS-SM安全审计的实战经验与避坑指南,为物联网及智能设备企业自建可控的远程SIM配置服务提供了系统性的解决方案。 阅读详情

相关推荐

高通ISP模块全解析:从Raw到JPEG的18个关键处理步骤(附避坑指南)

本文全面解析高通ISP模块从Raw到JPEG的18个关键处理步骤,涵盖原始数据预处理、色彩科学处理链、画质增强与降噪等核心环节。通过实战调优经验,揭示ISP架构中的技术原理与工程实践要点,帮助开发者避免常见问题,提升移动影像处理质量。

weixin_30399155的博客 357

2012百度之星资格赛试题与AC代码合集

百度文库下载地址:http://wenku.baidu.com/view/39d92648852458fb770b5616.html 2012百度之星资格赛试题与AC代码 A:百度计算器的加法 时间限制: 1000ms 内存限制: 10000kB 描述 百度框计算中提供了计算器这个功能,模拟计算器中的复杂功能,我们最先需要解决的就是实现加法模块。今天就给你个机会,和百度计算器一样,计算一...

weixin_30326741的博客 1485

告别迷茫!手把手教你用Synopsys VC USB VIP搭建验证平台(附UVM分层序列实战解析)

本文详细介绍了如何使用Synopsys VC USB VIP搭建验证平台,并深入解析UVM分层序列的实战应用。通过Step-by-Step的操作指南和关键配置示例,帮助验证工程师高效集成USB VIP,掌握从环境搭建到测试用例开发的全套技能,特别适合处理复杂协议验证的挑战。

weixin_42520573的博客 552

2012百度之星资格赛题目答案

这次百度之星,我做出来了7道,另外有2题的答案也被我找到了,还有一道F题希望有的人给我留下言吧,我想学习下。下面是我的答案,大多是用C++,也有几道是用Java的,代码里的一些css的东西请去掉,是csdn上加上去的。这次初赛可以说是不难的,像我这样的新手都能做出7道。不过,有些题目要好好考虑错误情况。F题,有人说百度翻译的不到位,这是别人告诉我的原文,http://162.105.81.212:

fw347969680的专栏 1069

SVPWM原理与MCU/FPGA实现:从数学推导到工程实战

空间矢量调制(SVPWM)是实现高性能电机驱动控制的核心算法之一,其通过六个基本电压矢量与零矢量的伏秒平衡,在一个PWM周期内合成任意方向的旋转电压圆,相比传统SPWM可提升约15%的直流电压利用率。该技术不仅涉及扇区判断、作用时间计算、过调制限幅等数学原理,还在MCU与FPGA两种硬件平台上有不同的工程实现路径,包括中心对齐PWM配置、死区插入、定点数流水线设计等。在电动工具、无人机、机器人及车载执行器等电池供电场景中,SVPWM直接决定续航与扭矩表现。本文从数学原理出发,详细拆解MCU和FPGA实现细节

weixin_34265814的博客 300

高通camera调试经验总结

修改AF对焦模式 adb shell setprop vendor.debug.camera.af.manual 2 //使能手动对焦 adb shell setprop vendor.debug.camera.af.manual 0 //使能自动对焦

weixin_43381364的博客 1万+

百度之星2012--No.2

#include #include using namespace std; #define N 19 void getleast(char a[N],char b[N],char result[N]) { //a为含‘0’、....、'9'的字符数组,b、result也一样含‘0’、....、'9',其中a为一个数,b也为数,c则记录a中含有多少个以b为结尾的数 int m=0,n=0;

晨风 991

173、NPU的编译器开发:开源社区贡献指南

本文分享了在NPU编译器开源社区贡献的经验心得。作者通过实际案例(如卷积维度错误、NaN输出等)阐述了NPU编译器开发的特殊性:硬件迭代快、边界条件复杂、厂商代码不可全信。提出有价值的贡献应聚焦硬件适配测试、性能剖析工具和反模式文档三类内容。强调用实测数据沟通、主动承担维护责任、保持代码通用性等社区协作技巧,并建议通过RFC提前沟通、附硬件实测数据等方式提高PR通过率。最后指出,NPU编译器开发是与聪明人共同填坑的过程,鼓励开发者提交"有诚意的代码"而非完美代码。

m0_50546716的博客 35

百度之星复赛Valley Numer II

ORZ cys

OZY的博客 471

激光雷达与相机时间戳同步:原理、触发方案与工程实现

目录一、引言:时间不同步,多传感器融合必出问题二、核心原理:相机成像机制与触发模式(同步的基础)2.1 相机成像的两个核心阶段:曝光与读出(1)非交叠曝光(2)交叠曝光2.2 相机触发模式:内触发 vs 外触发(1)内触发(2)外触发2.3 关键信号:Strobe信号与预输出(同步的核心技巧)三、三种主流时间戳同步方案(工程落地首选)3.1 方案一:统一硬触发(精度最高,高端场景首选)核心原理核心配置要点优缺点适用场景3.2 方案二:软触发+硬触发(Strobe预输出,车载量产首选)核心原理核心配置要点优缺

getusushu的博客 200

利用autojs制作抢购支付宝消费劵的手机脚本

前期准备工作 1.打开支付宝,点击中间的抢消费券的广告 2.点击左上角,将抢购页面添加到首页 3.查看支付宝首页是否出现消费劵 . autojs代码 "auto"; functiontaskstart(){ sleep(1000); launchApp('支付宝'); toast("正在打开支付宝应用"); sleep(1000); varxf=textContains("消费").findOne().bounds(); ...

洛阳泰山的博客 1万+

2012百度之星初赛第一场题A度度熊就是要第一个出场

第一题:度度熊就是要第一个出场 贴图不方便, 完整题目见这里 我的思路: 1,从下向上,找第一名的路径,把横线段做标记1,没有横线段的地方添加横线段出来,标记2 2,从上向下,找第K名(即度度熊的位置)的路径,遇到有标记的即表示本身就是第一(标记1),或加线段后可以是第一(标记2) 代码如下, 测试用例可以通过, 又做了几个简单的测试 // 2012 百度之星 初赛

CtrlFU 1862

ubuntu下编译qtwebengine

ubuntu qtwebengine

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1463

【2012百度之星/初赛下】A:度度熊就是要刷排名第一

描述:一天度度熊在Baidu游戏大厅中发现了一个隐藏的神奇游戏,叫做“度度熊的逆袭”。度度熊很好奇到底是什么情况,于是就进入了游戏。这个游戏很神奇,游戏会给出n个数Ai,度度熊可以任意从中选取一些数,一个数可以选任意多次。选好之后度度熊得到的分数为度度熊选出的数的Xor(异或)值。度度熊顿时产生了兴趣,决心要刷至Ranklist的第一名。但是度度熊犯难了,度度熊不知道自己给出的方案是不是最好的,于

Hackbuteer1的专栏 4790

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【2012百度之星/初赛上】D:轮子上的度度熊

描述:百度楼下有一块很大很大的广场。广场上有很多轮滑爱好者,每天轮滑爱好者们都会在广场上做一种叫做平地花式轮滑的表演。度度熊也想像他们一样在轮上飞舞,所以也天天和他们练习。 因为度度熊的天赋,一下就学会了好多动作。但他觉得只是单独的做动作很没意思,动作的组合才更有欣赏性。 平地花式轮滑(简称平花),是穿轮滑鞋在固定数量的标准桩距间做无跳起动作的各式连续滑行。度度熊表演的舞台上总共有N个桩,而他

Hackbuteer1的专栏 2836

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

百度star2012初赛第一场的题目

百度爱好者(Baiduer.com.cn)消息 2012年6月2日,2012百度之星Astar2012程序设计大赛初赛打开大幕。百度爱好者给大家带了初赛第一场的题目,供有兴趣的朋友研究。初赛第一场共4题。分别是度度熊就是要第一个出场、小小度刷礼品、集合的交与并、轮子上的度度熊。 第一题:度度熊就是要第一个出场 Baidu年会安排了一场时装秀节目。N名员工将依次身穿盛装上台表演。表演的顺序是通过

coder_duhg的专栏 1580

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【2012百度之星/初赛下】C:度度熊的礼物

描述:度度熊拥有一个自己的Baidu空间,度度熊时不时会给空间朋友赠送礼物,以增加度度熊与朋友之间的友谊值。度度熊在偶然的机会下得到了两种超级礼物,于是决定给每位朋友赠送一件超级礼物。不同类型的朋友在收到不同的礼物所能达到的开心值是不一样的。开心值衡量标准是这样的:每种超级礼物都拥有两个属性(A, B),每个朋友也有两种属性(X, Y),如果该朋友收到这个超级礼物,则这个朋友得到的开心值为A*

Hackbuteer1的专栏 3420

2012百度之星初赛第二场A题解答

Made By MarsBoy     转载请注明出处   今年是我参加Baidu Astar的第一年,身为编程菜鸟的我,知道自己在初赛就挂了,但是挂归挂,题目我还是很想在赛后解答的,于是经过一番功夫,现在将初赛第二场的解题思路和代码贴出来供大家分享。   【题目】 度度熊就是要刷排名第一 时间限制: 1000ms 内存限制: 65536kB 描述 一天度度熊在Baidu游戏

marsboy1992的专栏 1794

2012百度之星初赛:A题

A:度度熊就是要刷排名第一 时间限制:1000ms内存限制:65536kB 描述 一天度度熊在Baidu游戏大厅中发现了一个隐藏的神奇游戏,叫做”度度熊的逆袭”。度度熊很好奇到底是什么情况,于是就进入了游戏。这个游戏很神奇,游戏会给出n个数Ai,度度熊可以任意从中选取一些数,一个数可以选任意多次。选好之后度度熊得到的分数为度度熊选出的数的Xor(异或)值。度度熊顿时产生了兴趣,决心要

天幕个人博客 1245

2012百度之星初赛之C题:度度熊的礼物

C:度度熊的礼物 时间限制: 1000ms 内存限制: 65536kB 描述 度度熊拥有一个自己的Baidu空间,度度熊时不时会给空间朋友赠送礼物,以增加度度熊与朋友之间的友谊值。度度熊在偶然的机会下得到了两种超级礼物,于是决定给每位朋友赠送一件超级礼物。不同类型的朋友在收到不同的礼物所能达到的开心值是不一样的。开心值衡量标准是这样的:每种超级礼物都拥有两个属性(A, B),每个朋友

小神 590

2012百度之星初赛第2场:A题试题及参考答案

描述 一天度度熊在Baidu游戏大厅中发现了一个隐藏的神奇游戏,叫做”度度熊的逆袭”。度度熊很好奇到底是什么情况,于是就进入了游戏。这个游戏很神奇,游戏会给出n个数Ai,度度熊可以任意从中选取一些数,一个数可以选任意多次。选好之后度度熊得到的分数为度度熊选出的数的Xor(异或)值。度度熊顿时产生了兴趣,决心要刷至Ranklist的第一名。但是度度熊犯难了,度度熊不知道自己给出的方案是不是最好的,

boostCD的专栏 1047
上一篇: 海量数据面试题整理
下一篇: 【2012百度之星/初赛上】B:小小度刷礼品
hackbuteer1
博客等级 码龄15年 1万+粉丝 251原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值