比赛 Comet OJ - Contest #3 A
已经提交 已经通过 时间限制:1000ms 内存限制:256MB
题目描述
NN 只小猫站成一排,第 ii 只小猫的实力值是 a_iai。
小猫们要组织一场比赛,对于所有 1 \le i < j \le N1≤i<j≤N,第 ii 只小猫和第jj只小猫之间可以展开一场精彩度为 a_i+a_jai+aj 的比赛,这样,总共就能展开 \frac{N(N-1)}{2}2N(N−1) 场比赛。
熊老师想知道,这 \frac{N(N-1)}{2}2N(N−1) 场比赛中精彩程度前 KK 大的精彩程度之和是多少。
输入描述
输入共有两行。
第一行,两个正整数 N, K。
第二行,N 个正整数 a_1,a_2,\ldots,a_Na1,a2,…,aN。
数据满足 2 \le N \le 500, 1 \le a_i \le 10^9, 1 \le K \le \frac{N(N-1)}{2}2≤N≤500,1≤ai≤109,1≤K≤2N(N−1)。
输出描述
输出一行包含一个整数,表示答案。
样例输入 1
3 2 1 2 3
样例输出 1
9
样例输入 2
4 6 1000000000 1000000000 1000000000 1000000000
样例输出 2
12000000000
提示
样例 11:共可以举办 33 场比赛,精彩度分别为 3,4,53,4,5,前 22 大之和为 99。
样例 22:答案可能超出int 范围,要使用 long long 才能储存的下唷!
解决方案:
//#include"stdafx.h"
#include <bits/stdc++.h>
#include<iostream>
#include<stdio.h>
#include<vector>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
vector<long long> result;
long long output = 0;
long long N = 0;
long long K = 0;
vector<long long> data;
char c;
long long temp = 0;
cin >> N >> K;
//scanf("%lld %lld", &N, &K);
getchar();
while ((c = cin.get()) != '\n')
{
cin.unget();
cin >> temp;
data.push_back(temp);
}
for (long long i = 0; i < N; i++)
{
for (long long j = i + 1; j < N; j++)
{
result.push_back(data[i] + data[j]);
if (j == N - 1)
break;
}
if (i == N - 1)
break;
}
sort(result.begin(), result.end());
int geshu = result.size();
for (int i = 0; i < K; i++)
{
output += result[geshu - 1];
if (geshu <= 0)
break;
else
geshu--;
}
cout << output << endl;
getchar();
//return output;
return 0;
}
提交时由于返回值问题,出了点问题,已更改。
分析:返回值的结果错掉了,平台要求必须通过cout返回第三行的结果,通过return返回的结果是错误的。
通过cout输出第三行后,return就必须返回0.(平台要求,线下可编译)