time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Let's denote a kk-step ladder as the following structure: exactly k+2k+2 wooden planks, of which
Note that neither the base planks, nor the steps planks are required to be equal.
For example, ladders 11 and 33 are correct 22-step ladders and ladder 22 is a correct 11-step ladder. On the first picture the lengths of planks are [3,3][3,3] for the base and [1][1] for the step. On the second picture lengths are [3,3][3,3] for the base and [2][2] for the step. On the third picture lengths are [3,4][3,4] for the base and [2,3][2,3] for the steps.
You have nn planks. The length of the ii-th planks is aiai. You don't have a saw, so you can't cut the planks you have. Though you have a hammer and nails, so you can assemble the improvised "ladder" from the planks.
The question is: what is the maximum number kk such that you can choose some subset of the given planks and assemble a kk-step ladder using them?
Input
The first line contains a single integer TT (1≤T≤1001≤T≤100) — the number of queries. The queries are independent.
Each query consists of two lines. The first line contains a single integer nn (2≤n≤1052≤n≤105) — the number of planks you have.
The second line contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1051≤ai≤105) — the lengths of the corresponding planks.
It's guaranteed that the total number of planks from all queries doesn't exceed 105105.
Output
Print TT integers — one per query. The ii-th integer is the maximum number kk, such that you can choose some subset of the planks given in the ii-th query and assemble a kk-step ladder using them.
Print 00 if you can't make even 11-step ladder from the given set of planks.
Example
input
Copy
4 4 1 3 1 3 3 3 3 2 5 2 3 3 4 2 3 1 1 2
output
Copy
2 1 2 0
Note
Examples for the queries 1−31−3 are shown at the image in the legend section.
The Russian meme to express the quality of the ladders:
解题说明:题意是给出测试样例的数目,每个测试样子包含一个n和n个数,从中选出能搭建楼梯的阶数,如果是k阶楼梯,那么楼梯的两边长度必须为k+1,问最多能搭建几个阶梯。做法是将数据排序,选择最大的两个数做楼梯的两边,剩下的做个判断即可
#include
#include
#include
#include
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n, i, max1, max2, a;
scanf("%d", &n);
max1 = max2 = 1;
for (i = 0; i < n; i++)
{
scanf("%d", &a);
if (max1 < a)
{
max2 = max1;
max1 = a;
}
else if (max2 < a)
{
max2 = a;
}
}
printf("%d\n", max2 - 1 < n - 2 ? max2 - 1 : n - 2);
}
return 0;
}