EOJ1018-1019

1018. 询问队员身高

单点时限: 2.0 sec

内存限制: 256 MB

ECNU 篮球队教练陈老师选拔了一批篮球队员。对于篮球运动,队员身高是重要因素之一,陈老师的记忆力不好,他经常会向助理教练询问身高第,高的人是谁。助理教练不胜其烦,想请你帮忙写个程序回答陈老师的询问。
备注:每个队员的身高都各不相同。
输入格式
第一行是一个整数 t,表示测试数据组数。
对于每组测试数据:
第一行是两个整数n,m (1 <n< 50,1< m< 50),n表示队员的人数,m表示询问的次数
第二行有 n 个整数,a1, a2,a3,...,an,依次为第1个到第n 个队员的身高(1 ≤i≤n , 170 < ai< 230).
第三行有 m 个整数,b1,b2,b3,...,b,b,表示教练陈老师的第j个询问,询问身高第 b,高的队员编号 (1 < j< m,1 ≤ ы≤ n)
输出格式
每组测试数据输出一行,每行输出m 个整数,依次表示所求队员的编号。两个整数之间用一个空格分开,每行的最后有一个换行符

样例

input

2
3 1
228 205 190
3
5 3
223 179 217 195 193
3 4 5

output

3
4 5 2
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
	int id;
	int h;
}A[100];
bool cmp(node x,node y){
	return x.h>y.h; 
}
int main()
{
    int T,n,m;
    cin>>T;
    while(T--){
    	cin>>n>>m;
   		for(int i=1;i<=n;i++){
   			cin>>A[i].h;
   			A[i].id=i;
		}
    	sort(A+1,A+n+1,cmp);
    	while(m--){
    		int k;
    		cin>>k;
    		cout<<A[k].id<<" ";
		}
		cout<<endl;
	}
    return 0;
}

1019.排序
单点时限: 2.0 sec
内存限制: 256 MB
有 N个1到 1000 之间的整数1 ≤ N ≤ 100,对于其中重复的数,只保留个,把其余相同的数去掉。然后再按照个位数字进行升序排序,如果个位数字相同,则小的数排在前面。
输入格式
第 1 行: 整数 T (1 ≤ T ≤ 10) 为问题数。
第 2~2 xT+1行:每一个问题两行,第一行整数个数 N,第二行 N个用个空格分隔的正整数。
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0:等)然后在一行中输出经去重和排序后的正整数,两个数之间用一个空格分隔。最后个数后没有空格。行未尾输出一个换行符。

样例

input

2
10
20 40 32 67 40 20 89 300 400 15
18
2 1 2 1 2 1 2 1 20 20 40 32 67 40 89 300 400 15

output

case #0:
20 40 300 400 32 15 67 89
case #1:
20 40 300 400 1 2 32 15 67 89
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int a, int b)
{
    if (a % 10 != b % 10)
        return a % 10 < b % 10;
    else
        return a < b;
}

int main()
{
    int T, i, j, m, k = -1;
    int list[1001], s[100];

    cin >> T;
    while (T--)
    {
        for (i = 0; i < 1001; i++)
            list[i] = 0;
        k++;
        int n;
        cin >> n;
        for (i = 0; i < n; i++)
        {
            cin >> m;
            if (list[m] != 1)
                list[m] = 1;
        }
        for (i = 0, j = 0; i < 1001; i++)
        {
            if (list[i] == 1)
                s[j++] = i;
        }
        sort(s, s + j, cmp);

        cout << "case #" << k << ":" << endl;
        for (i = 0; i < j; i++)
        {
            if (i != j - 1)
                cout << s[i] << " ";
            else
                cout << s[i] << endl;
        }
    }
    return 0;
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值