猿辅导课堂上老师提供了一些角色,学生可以从中选择一个自己喜欢的角色扮演,每3个不同的角色就可以组成一个小组,进行分组对话。
当老师点击开始分组对话按钮的时候,服务器会为已经选择自己角色的同学分配对话小组,请问最多能组成多少个对话小组?
第一行为测试用例数量C(C<=100),接下来的C行每行为一个测试用例
每个用例的第一个数字表示可供选择的角色数量T(T<=1000),接下来的T个数字表示每个角色的选择人数Pi(Pi<=500)
一共C行,每行表示一个测试用例中的最大对话小组数量。
3 3 1 1 1 3 2 2 3 4 0 2 3 99
1 2 2
对于用例1,正好3个不同角色,每个角色1个人选,于是构成且只能构成一个小组。
对于用例2,在构成两个小组之后,第3个角色单了1人无法构成任何小组,所以最大小组数量是2。
对于用例3,学生扎堆选择了最后一个角色,但是第二个角色只有2个人,所以还是只能构成2个对话小组。
//贪心算法+优先队列/堆
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner input;
int C, T, i, j;
int[][] P;
input = new Scanner(System.in);
C = input.nextInt();
P = new int[C][];
for(i = 0; i < C; i++){
T = input.nextInt();
P[i] = new int[T];
for(j = 0; j < T; j++){
P[i][j] = input.nextInt();
}
}
for(i = 0; i < C; i++){
System.out.println(Solution(P[i]));
}
input.close();
}
private static int Solution(int[] P){
int first, second, third, ans;
PriorityQueue<Integer> pq;
ans = 0;
pq = new PriorityQueue<>((a, b) -> b - a);
for(int p : P){
if(p > 0){
pq.offer(p);
}
}
while(pq.size() > 2){
first = pq.poll();
second = pq.poll();
third = pq.poll();
if(--first > 0){
pq.offer(first);
}
if(--second > 0){
pq.offer(second);
}
if(--third > 0){
pq.offer(third);
}
ans++;
}
return ans;
}
} import heapq c = int(input()) ans = [] for i in range(c): istr = input() nums = list(map(int, istr.split())) num = [-x for x in nums[1:] if x>0] #print (num) heapq.heapify(num) #print (num) count = 0 while (len(num)>2): tmp = [] for j in range(3): tmpi = heapq.heappop(num) if -tmpi>1: tmp.append(tmpi+1) count += 1 for tmpi in tmp: heapq.heappush(num, tmpi) print (count)
import sys def solution(nums): count = 0 while len(nums) > 2: nums.sort(reverse=True) count += nums[2] c1 = nums[0]-nums[2] c2 = nums[0]-nums[1] nums = nums[3:] if c1 > 0: nums.append(c1) if c2 > 0: nums.append(c2) return count if __name__ == '__main__': c = int(sys.stdin.readline().strip()) while c > 0: line = [int(data.strip()) for data in sys.stdin.readline().split()] # assert len(line[1:]) == line[0] nums = [data for data in line[1:] if data > 0] print(solution(nums)) c -= 1断言有问题?