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)