著名出题人小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;
}