蓝桥杯官网 试题 PREV-240 历届真题 答疑【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Python】四种解法

为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。

今年的最大目标就是能为【一亿技术人】创造更高的价值。


资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

C++



#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;

typedef long long ll;

const int N=1e6+10;
struct time
{
	int s,a,e,sum,Time;	
};
bool cmp(time a,time b)
{
	return a.sum<b.sum;
}
int main()
{
	ll n;
	cin>>n;
	time T[n];
	for(ll i=0;i<n;i++)
	{
		cin>>T[i].s>>T[i].a>>T[i].e;
		T[i].sum=T[i].s+T[i].a+T[i].e;
	}
	sort(T,T+n,cmp);
	T[0].Time=T[0].s+T[0].a;
	for(ll i=1;i<n;i++)
	{
		T[i].Time=T[i-1].Time+T[i-1].e+T[i].s+T[i].a;
	}
	ll k=0;
	for(ll i=0;i<n;i++)
	{
		k+=T[i].Time;
	}
	cout<<k;
	return 0;
}

C

#include <stdio.h>
int shuru(int ,int []);
void paixu(int ,int []);
void bing(int ,int []);
void copy(int ,int [],int []);
long long qiu_zosj(int ,int ,int []);

int main(void) 
{
	int n;
	scanf("%d",&n);
	int shijian[n];
	int likai = shuru(n,shijian);
	paixu(n,shijian);
	printf("%lld\n",qiu_zosj(likai,n,shijian));
	return 0;
}

long long qiu_zosj(int lk,int n,int a[])
{
	long long zsj = 0LL;
	int i;
	int n_ = n;
	for(i = 0;i < n; i++)
	{
		zsj += a[i] * n_;
		n_ --;
	}
	return zsj - lk;
}

void copy(int n,int b[],int a[])
{
	while(n -- > 0)
	{
		*b ++ = *a ++;
	}
}

void bing(int n,int a[])
{
	int b[n];
	copy(n,b,a);
	int *q = b;
	int q_gs = n/2;
	int *h = b+n/2;
	int h_gs = n-n/2;
	while(q_gs > 0 && h_gs > 0)
	{
		if(*q < *h)
		{
			*a ++ = *q++;
			q_gs --;
		}
		else
		{
			*a ++ = *h++;
			h_gs --;
		}
	}
	while(q_gs > 0)
	{
		*a ++ = *q++;
		q_gs --;
	}
	while(h_gs > 0)
	{
		*a ++ = *h++;
		h_gs --;
	}
}

void paixu(int n,int a[])
{
	if(n > 1)
	{
		paixu(n/2,a);
		paixu(n-n/2,a+n/2);
		bing(n,a);
	}
}

int shuru(int n,int a[])
{
	int likai = 0;
	int i;
	for(i = 0 ;i < n ; i++)
	{
		int j , jie , li;
		scanf("%d%d%d",&j,&jie,&li);
		a[i] = j+jie+li;
		likai += li;
	}
	return likai;
}

Java

import java.io.IOException;
import java.io.StreamTokenizer;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) throws IOException {
		StreamTokenizer in=new StreamTokenizer(System.in);
		in.nextToken();
		int n=(int) in.nval;
		user[] u=new user[n];
		for (int i = 0; i < n; i++) {
			in.nextToken();
			int a=(int) in.nval;
			in.nextToken();
			a+=(int) in.nval;
			in.nextToken();
			int c=(int) in.nval;
			u[i]=new user(a,c,a+c);
		}
		Arrays.sort(u);
		//System.out.println(Arrays.toString(u));
		long ans=0,m=0;
		for (int i = 0; i < n; i++) {
			ans+=m+=u[i].ab;
			m+=u[i].c;
		}
		System.out.println(ans);
	}
	static class user implements Comparable<user> {
		int ab;
		int c;
		int sum;
		public user(int ab, int c, int sum) {
			this.ab = ab;
			this.c = c;
			this.sum = sum;
		}
		public user() {
		}
		@Override
		public int compareTo(user o) {
			return this.sum-o.sum;
		}
		@Override
		public String toString() {
			return "user [ab=" + ab + ", c=" + c + ", sum=" + sum + "]";
		}
		
	}
}

Python

class TimeCost():

    def __init__(s, a, b, c):
        s.w = a + b
        s.s = s.w + c
    
    def __lt__(s, o):
        return s.s < o.s

n = int(input())
l = []
for i in range(n):
    a, b, c = map(int, input().split())
    l.append(TimeCost(a, b, c))
l = sorted(l) # 就按照时间和排序一下就行了。
s, s1 = 0, 0
for i in l:
    s += i.w + s1
    s1 += i.s
print(s)

猜你喜欢

转载自blog.csdn.net/feng8403000/article/details/125032747