列表

详情


NC25194. 苹果项链

描述

大美门口那棵树上的苹果有两种颜色:金和银。金苹果的数量是 n,每个

苹果都有它的 idid 1 n)和不同的重量(g[i])。银苹果的数量是 n,每个苹果都有它的 idid 1 n)和不同的重量(s[i])。现在你需要用这些苹果来串一条项链。第一个要求是项链的颜色必须是金银相间的(意思是一个金苹果接一个银苹果,一个银苹果接一个金苹果,一个接一个)。第二个要求是项链中的所有金苹果的重量应该按降序排列,银苹果也是降序。你能告诉我这条项链的 id 吗?这条项链的 id 是构成这条项链的金苹果和银苹果的 id 组合。

而且,第一个一定是金苹果。 

输入描述

第一行一个整数T(T <=
50),表示数据组数。

在每组输入数据中,第一行有一个正整数,n(n
<= 1000)。

第二行中有n个正整数g[i](g[i] <= 1000),是n个金苹果的重量。第三行中有n个正整数s[i](s[i] <= 1000),是n个银苹果的重量。

输出描述

对于每组数据,输出项链的id,每两个数中间有一个空格。

示例1

输入:

2
4
1 2 3 4
2 5 1 3
5 
2 5 3 4 1
1 2 3 4 5

输出:

4 2 3 4 2 1 1 3
2 5 4 4 3 3 1 2 5 1

说明:

对于第一个样例,金苹果选最大重量的(第四个)放在项链的第一个位置,银苹
果选最大重量的(第二个)放在项链的第二个位置……

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.5.2) 解法, 执行用时: 97ms, 内存消耗: 4336K, 提交时间: 2019-04-21 12:31:49

T=int(input())
for t in range(T):
    n=int(input())
    A=list(map(int,input().strip().split()))
    B=list(map(int,input().strip().split()))
    C=D=list(map(int,list(range(n))))
    C=sorted(C,key=lambda x:A[x],reverse=True)
    D=sorted(D,key=lambda x:B[x],reverse=True)
    for i in range(n):
        print(C[i]+1,D[i]+1,end=' ')
    print()

C++11(clang++ 3.9) 解法, 执行用时: 21ms, 内存消耗: 480K, 提交时间: 2019-04-21 12:48:49

#include<bits/stdc++.h>
using namespace std;
int k,i,n,T;
struct NODE
{
	int a,b;
	bool operator<(NODE A)
	{return a>A.a;}
	NODE()
	{cin>>a,b=++k;}
};
int main()
{
	cin>>T;
	while(T--)
	{
		cin>>n;
		k=0;
		NODE g[n];
		k=0;
		NODE s[n];
		for(sort(g,g+n),sort(s,s+n),i=0;i<n;i++)
			cout<<g[i].b<<" "<<s[i].b<<" ";
		puts("");
	}
	return 0;
}

上一题