HDU - 6292 赛题分析 (简单搜索)

著名出题人小Q每次比赛后都会写一份《赛题分析》,包含比赛概况、每题的参考算法以及一些统计数值。

对于一道题来说,小Q会统计最短的验题人代码长度(Shortest judge solution)以及赛内参赛队伍最短的AC代码长度(Shortest team solution)。

统计验题人代码长度比较容易,因为验题人最多也不会超过
20
20
个。但是统计选手代码长度就不容易了,因为大赛区动辄三四百支队伍。

请写一个程序,帮助小Q统计最短代码长度。
Input
第一行包含一个正整数
T(1≤T≤13)
T(1≤T≤13)
,表示赛题数量。

每道题第一行包含两个整数
n,m(2≤n≤20,0≤m≤500)
n,m(2≤n≤20,0≤m≤500)
,分别表示验题人数量以及AC了该题的队伍数量。

第二行包含
n
n
个正整数
a
1
,
a
2
,…,
a
n
(50≤
a
i
≤65536)
a1,a2,…,an(50≤ai≤65536)
,依次表示每个验题人的代码字节数。

第三行包含
m
m
个正整数
b
1
,
b
2
,…,
b
n
(50≤
b
i
≤65536)
b1,b2,…,bn(50≤bi≤65536)
,依次表示每支AC队伍的代码字节数。若
m=0
m=0
则该行为空行。
Output
对于第
i(1≤i≤T)
i(1≤i≤T)
道题,输出三行,第一行输出Problem
x
x
:,其中
x=i+1000
x=i+1000

第二行输出Shortest judge solution:
y
y
bytes.,其中
y
y
表示最短的验题人代码字节数。

第三行输出Shortest team solution:
z
z
bytes.,其中
z
z
表示最短的选手代码字节数,若不存在请输出N/A。

注意:间隔都是一个空格。
Sample Input
2
3 2
3627 1460 5288
2365 2671
2 0
5510 7682
Sample Output
Problem 1001:
Shortest judge solution: 1460 bytes.
Shortest team solution: 2365 bytes.
Problem 1002:
Shortest judge solution: 5510 bytes.
Shortest team solution: N/A bytes.
(以前直接的复制错误导致乱码…题目可在原址查看)
问题链接http://acm.hdu.edu.cn/showproblem.php?pid=6292
问题分析:定义一个结构体存储指针以及两个数组的最小值,用动态数组存储n个结构体,把结构体里面的两个指针分别指向两个动态数组,用选择最小值的方法存储在两个结构体的最小值中,最后输出即可。
AC通过的C++语言程序如下:

#include<iostream>
using namespace std;
struct tishu
{
	int k;
	int *ytr;
	int *dws;
	int zx1, zx2;
};
int main()
{
	int n;
	cin >> n;
	tishu *p = new tishu[n];
	for (int i = 0; i < n; i++)
	{
		int j;
		cin >> j >> p[i].k;
		p[i].ytr = new int[j];
		p[i].dws = new int[p[i].k];
		for (int g = 0; g < j; g++)
		{
			cin >> p[i].ytr[g];
		}
		for (int g = 0; g < p[i].k; g++)
		{
			cin >> p[i].dws[g];
		}
		p[i].zx1 = p[i].ytr[0];
		for (int g = 0; g < j; g++)
		{
			if (p[i].zx1 > p[i].ytr[g])
			{
				p[i].zx1 = p[i].ytr[g];
			}
		}
		p[i].zx2 = p[i].dws[0];
		for (int g = 0; g < p[i].k; g++)
		{
			if (p[i].zx2 > p[i].dws[g])
			{
				p[i].zx2 = p[i].dws[g];
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		cout << "Problem " << i + 1001 << ":" << endl;
		cout << "Shortest judge solution: " << p[i].zx1 << " bytes." << endl;
		if (p[i].k == 0) { cout << "Shortest team solution: " << "N/A" << " bytes." << endl; }
		else
		{
			cout << "Shortest team solution: " << p[i].zx2 << " bytes."<<endl;
		}
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值