给一段C++程序提高效率

来源:百度知道 编辑:UC知道 时间:2024/06/24 11:57:39
这里有一段程序,内容很简单,但时间太长(总是超时),请问如何给它提速(提高效率)。

程序要求:
问题描述:
某高校要统计校内学生的各科成绩总分和各门科的平均分,需要编写一个程序来完成

输入:
多组测试数据,每组测试数据里:第一行是n,k(1<=n<=1e6,1<=k<=1000),
n是学生数目,k是科目数。接下来就是n*k个数,
每k个就是一个学生所有科目的成绩,是在0-100之间的数

输出:
对于每组测试数据:
第一行输出各学生的成绩总分
第二行输出各科平均分(四舍五入到整数)
最后多输出一个空行表示分隔

样例输入:
3 2
100 100
90 90
80 80
2 3
90 90 90
60 60 60
2 2
1 2 3 4

样例输出:
200 180 160
90 90

270 180
75 75 75

3 7
2 3

我的程序思路:先读入n和k,然后动态建立一个数组averScores,k个元素,初始化。再读入成绩,一个人的输入完之后就输出总分,再分别加到数组的各个元素中,以便算单科平均。随后算出来,输出。释放内存。

#include <iostream>
#include <memory>

int main()
{
using namespace std;
long n; // #students
int k; // #subjects
long i; // tmp
int j; //tmp
long *averScores; // scores of each subject
int sum; // total score o

这是哪个网站的题目?
貌似测试数据极限情况下有几GB,我想亲自提交一下代码

我可以很负责任的告诉你,你这种题目要把cin改成scanf,否则一般是要超时的

很明显是从文件读取嘛。。。

另外既然是c++写程序,那么就尽管使用标准库的东西就OK了。。

这样的优化的通常方法是检查你是否有计算是多余的,也就是说你相同的计算是否执行了多次。。。然后想办法把这些去掉就OK了。

...,,,

回复楼主。
因为C++是基于流的思想,为了易用性在效率上面做了妥协。。。而fread等直接利用底层API来实现的。
你要改成API说不定能更快,一家之见,呵呵。

两个if (i == k - 1),没有必要,只要把换行写到for循环外面就行了