CSDN第30期竞赛

CSDN第30期竞赛

1.天然气订单

天然气运输成本昂贵,危险性高,为了节省运输成本,提倡绿色环保,需要尽可能的优化订单配送,比如相同地区的天然 气订单可以一次性配送。 现需要向多个地区运输天然气。但是同一个地区可能有多个订单需求。当前仅只知道某些成对的 订单是同一个地区的,同一个地区的天然气需要尽可能一次性配送从而降低运输成本,所以需要尽可能的将同一个地区的 订单放在一起。订单的编号是1到n。

得分: 10/25

class Solution:
	def __init__(self) -> None:
		pass
	def solution(self, n, m, vector):
		for i in range(1,n+1):
			index = []
			for j in range(len(vector)):
				if vector[j] == []:
					continue
				if i in vector[j]:
					index.append(j)
			if len(index) > 1:
				temp_list = []
				remove_list = []
				for z in index:
					temp_list += vector[z]
					remove_list.append(vector[z])
				for z in remove_list:
					vector.remove(z)
				vector.append(list(set(temp_list)))
if __name__ == "__main__":
	arr_temp = [int(item) for item in input().strip().split()]
	n = int(arr_temp[0])
	m = int(arr_temp[1])
	vector = []
	for i in range(m):
		vector.append([int(item) for item in 		input().strip().split()])
	sol = Solution()
	sol.solution(n, m, vector)
	result1 = vector	
	result = []
	for i in result1:
		if i != []:
			i.sort()
		result.append(i)
	print(len(result))
	result.sort(key=lambda x: x[0])
	for i in result:
		if i == [] :
			continue
	for j in range(len(i)-1):
		print(i[j],end=" ")
	print(i[-1])

2.小艺读书

书是人类进步的阶梯。 小艺每周因为工作的原因会选择性的每天多读几页或者少读几页。 小艺想知道一本n页的书她会在 周几读完。

得分: 25/25

#include <stdio.h>
#include <stdlib.h>
void solution(int n, int pages[7]){
    
    
	int sum = 0;
	for(int i = 0;i< 7;i++){
    
    
		sum += pages[i];
	}
	int leave = n % sum;
	int day = 0;
	for(;day< 7;day++){
    
    
		leave -= pages[day];
		if(leave <=0) break;
	}
	printf("%d",day +1);
}

int main() {
    
    
	int n;
	scanf("%d", &n);
	int pages[7];
	for (int i = 0; i < 7; i++)
	{
    
    
	scanf("%d", &pages[i]);
	}
	solution(n, pages);
	return 0;
}

3.买苹果

小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在 只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。

得分: 25/25

#include <stdio.h>
#include <stdlib.h>
void solution(int n){
    
    
	int eight_sum = n / 8 * 8;
	int six_tem_sum = n - eight_sum;
	char failed_flag = 0;
	while(six_tem_sum % 6 != 0 ){
    
    
		eight_sum -= 8;
		if(eight_sum < 0 ) {
    
    
			failed_flag = 1;
			break;
		}
		six_tem_sum += 8;
	}
	if(failed_flag) printf("-1");
	else{
    
    
		printf("%d",eight_sum / 8 + six_tem_sum / 6);
	}
}

int main() {
    
    
	int n;
	scanf("%d", &n);
	solution(n);
	return 0;
}

4.圆桌

有N个客人与足够多张的圆桌。主人安排每位客人坐在一个圆桌边,但是每位客人希望自己左右边上分别有一些空座位, 不然会觉得害羞。注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。 试 问主人需要准备多少个座位,才能让每个客人舒适的坐下。

得分: 25/25

class Solution:
	def __init__(self) -> None:
		pass
	def solution(self, n, vector):
		l,r = zip(*vector)
		l = list(l)
		r = list(r)
		l.sort(reverse=True)
		r.sort(reverse=True)
		res = 0
		for i in range(n):
			res += max(l[i],r[i])
		return res+n

if __name__ == "__main__":
	n = int(input().strip())
	vector = []
	for i in range(n):
		vector.append([int(item) for item in input().strip().split()])
	sol = Solution()
	result = sol.solution(n, vector)
	print(result)

猜你喜欢

转载自blog.csdn.net/first_bug/article/details/129231463