햄부기

시간 제한1.5초메모리 제한1024 MB

요약
현재 화난 피돌이들 중 인접한 두 명씩 골라 두 값의 최솟값만큼 햄부기를 주면서, 남는 화난 정도의 합을 최소로 만드는 방법을 출력한다.
난이도

보통10점 중 7점

유형
그리디, 구현, 정렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

피돌이들이 화가 나 있다! 피돌이들은 총 NN명 있으며 1번부터 NN번까지의 번호가 붙어있다. ii번 피돌이가 화난 정도는 정수 a_ia\_i로 나타낼 수 있다. 이는 ii번 피돌이가 햄부기 a_ia\_i개 만큼 화났음을 의미하며 이는 햄부기를 1개 받을 때마다 1씩 줄어든다. a_i=0a\_i=0이라면 ii번 피돌이가 화나 있지 않음을 나타낸다.

당신은 피돌이들에게 햄부기를 뿌려 피돌이들을 진정시키려고 한다. 하지만 햄부기를 그냥 뿌리는 것은 재미없다고 생각한 당신은 다음과 같은 방식을 사용하기로 했다.

  • 현재 상태에서 화가 나 있는 피돌이들의 수를 pp, 화가 나 있는 피돌이 중 번호가 xx번째로 작은 피돌이의 번호를 f(x)f(x)라고 하자. 1≤i<p1 \leq i < p인 정수 ii를 골라 f(i)f(i)번 피돌이와 f(i+1)f(i+1)번 피돌이에게 햄부기를 min⁡(a_f(i),a_f(i+1))\min(a\_{f(i)}, a\_{f(i+1)})개 만큼 준다.

당신은 위의 방법대로 햄부기를 뿌려 피돌이들이 화난 정도의 합 kk를 최소화 하고싶다. kk의 최솟값과 kk가 최솟값이 되게하는 방법을 하나 찾아보자. 단, 햄부기는 무한히 있다고 가정한다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤100)(1\leq T \leq 100)

각 테스트 케이스의 첫째 줄에 피돌이들의 수 NN이 주어진다. (2≤N≤1 000)(2 \leq N \leq 1\ 000)

각 테스트 케이스의 둘째 줄에 각 피돌이들이 초기에 화난 정도를 나타내는 NN개의 정수 a_1,a_2,⋯ ,a_Na\_1, a\_2, \cdots, a\_N이 공백을 두고 주어진다. (1≤a_i≤100)(1 \leq a\_i \leq 100)

모든 테스트 케이스에서 NN의 합은 1 0001\ 000을 넘지 않는다.

출력

각 테스트 케이스의 첫째 줄에 kk의 최솟값과 햄부기를 주는 횟수 xx를 공백을 두고 출력한다.

각 테스트 케이스의 둘째 줄에 몇 번째 피돌이에게 햄부기를 줘야 하는지 나타내는 xx개의 정수 p_1,p_2,⋯ ,p_xp\_1, p\_2, \cdots , p\_x를 공백을 두고 출력한다. p_ip\_i는 ii번째로 햄부기를 줄 때 f(p_i)f(p\_i)번째 피돌이와 f(p_i+1)f(p\_i+1)번째 피돌이에게 줬음을 나타낸다.

예제1

  1. 예제 1

    입력
    1
    5
    3 5 6 4 5
    
    예상 출력
    1 4
    2 1 2 1