招行笔试编程第二题

本地测试全都通过,提交之后通过率为0.。。。有没有大佬指点一下。
bool cmp(pair<int, int> a, pair<int, int> b)
{
	if (a.first != b.first)
	{
		return a.first < b.first;
	}
	else
	{
		return a.second < b.second;
	}
}


int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		int n;
		cin >> n;
		int tmp;
		vector<int> len;
		for (int i = 0; i < n; i++)
		{
			cin >> tmp;
			len.push_back(tmp);
		}
		vector<int> weight;
		for (int i = 0; i < n; i++)
		{
			cin >> tmp;
			weight.push_back(tmp);
		}
		vector<pair<int, int> > data;
		for (int i = 0; i < n; i++)
		{
			data.push_back(make_pair(len[i], weight[i]));
		}
		sort(data.begin(), data.end(), cmp);

		vector<bool> flag(n, 0);
		flag[0] = 1;
		int cnt = 0;
		stack<pair<int, int>> st;
		st.push(data[0]);
		while (st.size() < n)
		{
			bool start = true;
			for (int i = 0; i < n; i++)
			{
				if (!start)
				{
					pair<int, int> top = st.top();
					if (flag[i] == 0 && data[i].first >= top.first && data[i].second >= top.second)
					{
						flag[i] = 1;
						st.push(data[i]);
					}
				}
				else
				{
					st.push(data[i]);
					flag[i] = 1;
					start = false;
				}
			}
			cnt++;
		}
		cout << cnt << endl;
	}
	return 0;
}

#招行笔试##招商银行##笔试题目#
全部评论
我用java ac的,大概思路就是先创个类然后按长度排序,如果长度一样就按重量排序,然后对列表逐个遍历如果遇到后面比前面大的就标记,每遍历一次计数器加1,知道所有都被标记,然后返回计数器的值就行了。
1 回复 分享
发布于 2020-03-27 21:05
第二题我的思路是两个属性从小到大排序,length优先和weight优先各做一次,取最小,实现绝对没问题……也是0% 不知道思路有没有问题
1 回复 分享
发布于 2020-03-27 21:06
https://www.nowcoder.com/discuss/393925我的思路,python20行全A
1 回复 分享
发布于 2020-03-28 10:23
一样  一道题都没搞出来
点赞 回复 分享
发布于 2020-03-27 21:01
我回溯超时了,哎
点赞 回复 分享
发布于 2020-03-27 21:03
我也是,第二题始终通过的case为0,但是给的两个例子在本地都可以通过
点赞 回复 分享
发布于 2020-03-27 21:04
想用贪心做,结果通过率也是0。我猜通过率为0的原因是一个case中有多个测试用例,其中一个不对相当于这个case没通过。
点赞 回复 分享
发布于 2020-03-27 21:06
楼主试试 1 4 2 5 9 2 4 5 3 1 这个例子?你代码输出是1,但是应该最小是2吧。
点赞 回复 分享
发布于 2020-03-27 21:14
谢谢7楼让我找到错误了,忘了注释掉第46行。 总体思路是将木棍先按长度排序,再按质量排序。 设一个栈,将访问过的木棍入栈,栈大小达到n时循环结束。 设一个标记数组,标记某根木棍是否被访问过。 在每次循环内,遍历木棍,如果木棍未被访问过,且长度和质量都大于等于栈顶元素的长度和质量,就将其入栈。每遍历一次就将结果加1。 还是太粗心了,戒骄戒躁🤣
点赞 回复 分享
发布于 2020-03-27 21:28
可以看看这个思路,终于看懂了,一看就会,一写就废 https://blog.csdn.net/dingzi1875/article/details/101494695?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
点赞 回复 分享
发布于 2020-03-27 21:47
可以看看这个思路,终于看懂了,一看就会,一写就废了: https://blog.csdn.net/dingzi1875/article/details/101494695?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
点赞 回复 分享
发布于 2020-03-27 21:47
我觉得应该是排序以后再遍历查找,虽然我的这个题也没过,但是两个测例在本地通过的
点赞 回复 分享
发布于 2020-03-28 17:50
还有一个做法是第一关键字排序后算第二关键字的最长上升子序列,nlogn可解
点赞 回复 分享
发布于 2020-03-28 17:52

相关推荐

评论
1
6
分享
牛客网
牛客企业服务