L - Swimmer

题目

题目来源
B - Problem Select
HOJ is an online judge system for students in HIT to practice. As the administrator, you would always setup contests by selecting problems from the problem set. Problem IDs are integers that can be phased by url. For example, the corresponding problem ID of url http://acm.hit.edu.cn/problemset/1001 is 1001.

Now the task is, given n urls, print the smallest k problem IDs in increasing order.
Input
The first line of the input contains one integer T (1 ≤ T ≤ 10), indicating the number of test cases.

For each test case, the first line contains two integers, n (1 ≤ n ≤ 1000) and k (1 ≤ k ≤ n).

For the next n lines,each line contains a string indicating the problem’s url. The problem ID is guaranteed to be in range [1,10000] and unique in each case.
Output
Output T lines.

For each test case, you should output k numbers in a line, and there shouldn’t be any spaces at the end of the line.
Sample Input
2
3 2
http://acm.hit.edu.cn/problemset/1003
http://acm.hit.edu.cn/problemset/1002
http://acm.hit.edu.cn/problemset/1001
4 1
http://acm.hit.edu.cn/problemset/1001
http://acm.hit.edu.cn/problemset/2001
http://acm.hit.edu.cn/problemset/3001
http://acm.hit.edu.cn/problemset/501
Sample Output
1001 1002
501

题目大意

给定一个T为测试用例的数目,对于每个测试用例,输入一个n和k,n为此测试用例中字符串的个数,而每个字符串都是一个网址,我们要做的就是把网址最后的数字取出来,然后按增加的顺序输出最小的k个数字。

题目分析

这道题很简单,直接根据网址的特点取出最后的几位数字然后把他们保存起来,然后将最小的k个元素挑出来依次输出。

解题分析

这道题很简单,直接根据网址的特点取出最后的几位数字然后把他们保存起来,然后将最小的k个元素挑出来依次输出。

解题思路

将固定网址前字母位都舍弃,保存数字部分的字符,然后转换位数字,然后挑出最小的k个数字。

具体代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int a[10000];
int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		int a[1000],l=0;
		int n, k;
		char str[1000] = {};
		cin >> n >> k;
		for (int i = 0; i < n; i++)
		{
			scanf("%s", str,1000);
			int x=0;
			for (int i = strlen(str)-1; i >=33 ; i--)
			{
				//cout << x<<" "<<i << " " << str[i] << " " << strlen(str) << endl;
				x += (str[i]-'0')*pow(10, strlen(str) - i - 1);
			}
			a[l] = x;
			l ++ ;
		}
		sort(a,a+l);
		for (int i = 0; i < k; i++)
		{
			cout << a[i];
			if (i != k - 1)cout << " ";
		}
		cout << endl;
	}
	return 0;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望—星空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值