为帮助大家能在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)