@Dmaxiya
2018-06-07T21:50:16.000000Z
字数 4599
阅读 991
Hello_World
Q&A.txt
(在 192.168.1.199 内)题号 | A | B | C | D | E | F | G | H | I |
---|---|---|---|---|---|---|---|---|---|
分值 | 15 | 15 | 15 | 25 | 25 | 25 | 30 | 30 | 45 |
测试点 | 10 | 10 | 10 | 10 | 10 | 10 | 20 | 10 | 10 |
分值/测试点 | 1.5 | 1.5 | 1.5 | 2.5 | 2.5 | 2.5 | 1.5 | 3 | 4.5 |
题号 | 评测方式 |
---|---|
A | 忽略行末空格与结尾换行符 |
B | 特殊判定 |
C | 忽略行末空格与结尾换行符 |
D | 忽略行末空格与结尾换行符 |
E | 忽略行末空格与结尾换行符 |
F | 忽略行末空格与结尾换行符 |
G | 忽略行末空格与结尾换行符 |
H | 特殊判定 |
I | 忽略行末空格与结尾换行符 |
每位选手将文件夹“姓名”重命名为自己的名字,在“姓名”文件夹内有每道题对应的 c/cpp 文件,每个选手每道题选择一种语言编写代码提交。
若 A 题选择用 c++ 进行编写,则请删去 A.c 文件,保留 A.cpp 文件。最后提交时选手文件夹内只能含有不多于 6 个 c/cpp 文件,文件名(除去文件后缀后)不得重复。
每道题的空间限制为 256M,若程序开辟的空间超过 256M,则该程序视为“内存超出”,若其中一个测试点超出内存,很可能本题的所有测试点都将超出内存,超出内存的测试点不得分。
内存计算方式:
如:一个int
占用 4 个字节,则int num[10000000]
占用
每道题的时间限制为 1s,若程序运行的时间超过 1s,则该程序视为“超时”,对于有不同数据范围的题目,程序运行的时间可能是不同的,数据范围越大,程序运行的时间可能越长,所以选手应尽量减少程序的时间复杂度。
运行时间计算方式:
如:对 ~ 进行求和,若使用如下代码:
long long sum = 0, i;
for(i = 1; i <= 1000000000LL; ++i) {
sum += i;
}
则程序执行的次数为 ,需要 10s,若使用如下代码:
long long sum = (1 + 1000000000LL) * 1000000000LL / 2;
则程序执行的次数为 ,所需要时间为 。
实际代码的运行时间可能少于估计值,但本次赛题数据保证:若程序运行次数超过 必然返回超时。
本次比赛采用 cena 软件对选手代码进行评测,每道题都已经给出了对应的 .c 与 .cpp 模板文件,以下以 .c 模板文件为例进行说明。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
freopen("A.in", "r", stdin);
freopen("A.out", "w", stdout);
fclose(stdin);
fclose(stdout);
return 0;
}
注意上述代码中的
freopen("A.in", "r", stdin);
freopen("A.out", "w", stdout);
fclose(stdin);
fclose(stdout);
其中第一条表示将标准输入流重定向到文件 A.in
,后面代码中的 scanf
cin
getline
等标准输入语句,都将从文件 A.in
中读入;第二条表示将标准输出重定向到文件 A.out
,后面代码中的 printf
cout
等标准输出语句,都将输出到文件 A.out
中,第三条与第四条是关闭重定向。
对应不同题目,重定向的文件名为 *.in
*.out
,其中 * 为对应题号,选手可以不必担心该问题,对应题号已经写在对应的模板文件中,无需修改。
这四条语句是用于评测时数据读入与输出:
*.exe
文件对应路径下新建 *.in
文件,并将输入数据写入该文件内,运行后控制台无输出,输出内容在 *.out
文件中代码功能为输出 :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int n, k;
int num[20];
// 函数示例
int sum() {
int ret = 0, i;
for(i = 1; i <= n; ++i) {
ret += num[i];
}
return ret * k;
}
// 递归函数示例
int Sum(int Index) {
if(Index == 0) {
return 0;
}
return num[Index] * k + Sum(Index - 1);
}
int main(int argc, char** argv) {
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
int i;
scanf("%d%d", &n, &k);
for(i = 1; i <= n; ++i) {
scanf("%d", &num[i]);
}
printf("%d\n", sum());
printf("%d\n", Sum(n));
fclose(stdin);
fclose(stdout);
return 0;
}
/*
test.in
5 3
4 6 8 1 2
test.out
63
63
*/
malloc
或者 new
申请空间,可能会造成程序“超时”,若忘记释放空间,可能会造成“内存超出”gets
函数存在堆栈溢出问题,所以建议用 getline(cin, str)
(str
为 string
类型变量,需要用 cpp
文件进行编译),所有题目用 scanf("%s", str);
或者 cin >> str;
(str
为字符串数组)就已经足够
long long LL;
unsigned long long uLL;
double db = 1.23456;
scanf("%lld", &LL);
scanf("%llu", &uLL);
cout << setiosflags(ios::fixed);
cout << setprecision(4) << f << endl;
scanf("%lf\n", &db);
printf("%.4lf\m", db);
scanf("%d%d", &a, &b);
或者 scanf("%d %d", &a, &b);
或者 cin >> a >> b
,而不要用 scanf("%d,%d", &a, &b);
。long
的字节数(4 个字节或 8 个字节)解释不同,其数据范围不能确定,所以若要使用 64 位整型变量,建议用 long long
定义变量float
精度太小,计算过程容易出现精度损失,不建议使用 float
,建议使用 double
cin
cout
的速度相比于 scanf
printf
慢很多,可能出现读入数据时间超过题目时限的情况,建议使用 scanf
printf
(特别是 D 题)数据类型 | 大致范围 |
---|---|
int | |
long long | |
unsigned long long | |
double | 精确到小数点后 15 ~ 16 位 |
比赛结束后工作人员将所有测试数据与标程压缩包和题解上传群文件,所有标程均为 .c 文件,即所有题目都可以用 C 语言解决,不需要 C++ 语言基础。
比赛结束当晚(最晚 27 日)即可判完所有程序,工作人员将上传所有选手的排名分数表,对评测结果有异议的可以联系工作人员(评测结果出错,数据文件出错或者标程出错等,都可以提出),工作人员将给出回复或采取相应措施
选手也可以联系工作人员获取自己每个测试点的得分信息
27 日晚七点之前若无其他异议,则确定一、二、三等奖