【CF 1197A】DIY Wooden Ladder
A. DIY Wooden Ladder
Let's denote a kk-step ladder as the following structure: exactly k+2k+2 wooden planks, of which
- two planks of length at least k+1k+1 — the base of the ladder;
- kk planks of length at least 11 — the steps of the ladder;
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
4
4
1 3 1 3
3
3 3 2
5
2 3 3 4 2
3
1 1 2
output
2
1
2
0
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
int a[100005];
int main()
{
int t,n,i;
cin>>t;
while(t--)
{
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
int t=a[n-2];
n-=2;
if(t>n)
cout<<n<<endl;
else
cout<<t-1<<endl;
}
return 0;
}