CSP 复赛注意事项

马上    \; CSP复赛    \; 要考试了。我这里总结了几点考场上要注意的:

一、爆0的情况

1. 文件名错误

比赛三个半小时,共有4道题目。每道题目都有一个特定的文件名(一般是英文),评测系统是根据文件名字寻找
你的代码的。如果你连文件名都写错了,那么:

找不到文件 \color{Cyan}\colorbox{Violet}{找不到文件} , 于 是 , 你 光 荣 的 爆 0 了 。 ,于是,你光荣的爆0了。 0

解决方法

(1). 对于拼写错误的,不多赘述。请检查你的文件名;
(2). 对于以下情况:
5N5K4H.png
请进行如下操作(win10系统):

  1. 打开“此电脑”;
    5N5wCj.png
  2. 选择“查看”:
    5N5hG9.png
  3. 将“文件扩展名”一栏勾上。
    此时你会发现:
    5NIloF.png
    危 \color{Balck}\colorbox{Red}{危}

2. MLE

什么是MLE呢?简单来说,就是`空间限制超限`,就是`Memory Limit Exceeded`。这会导致你这道题一分没有,
爆0.

解决方法:

1.计算空间复杂度 S(n)(划重点!)

平常的题目内存限制都是 125.00MB 。看似挺大的。但数组很占空间。一个 int 类型的数组要4 byte,long long 类型的8个字节,char类型的1 byte。
为了好计算, 我 们 把 128 M B 作 为 内 存 限 制 。 我们把128MB作为内存限制。 128MB
1 M B = 1024 K B , 1 K B = 1024 B , 1 B = 8 B y t e 1MB=1024KB,1KB=1024B,1B=8Byte 1MB=1024KB1KB=1024B1B=8Byte
∴ \therefore 128 M B = 1 × 2 7 + 10 + 10 − 3 + 1 = 2 25 = 33554432 128MB=1 \times2^{7+10+10-3+1}=2^{25}=33554432 128MB=1×27+10+103+1=225=33554432
再 开 个 平 方 : 33554432 ≈ 5792.618 再开个平方:\sqrt{33554432}\thickapprox5792.618 33554432 5792.618
所以,一般开 i n t int int类型的数组不要超过 5500 5500 5500。二维不要超过 [ 220 ] [ 220 ] [220][220] [220][220]

2.减少递归算法的使用(很占空间!!!)

3. 文件读写操作写错

每道题都要加读写操作。如果没有的话。很可惜,你 “爆0” 了。

详细请见:关于freopen

解决方法:

1.会写文件读写操作。
#include<bits/stdc++.h>
using namespace std;
int n,m;
int main(){
	//这两行为文件读写操作。
	freopen("plus.in","r",stdin);
	freopen("plus.out","w",stdout);
	//具体名称以考试为准。
	cin>>n>>m;
	cout<<n+m;
	return 0;
}

2.专门留下几分钟检查读写操作!!!

4.RE

何为RE?就是 “Runtime Error” ,即运行时错误。原因主要有以下几点:

1.主函数类型写成void。

在CSP以及之后的NOIP等考试中,c/c++主函数类型必须为int,否则会报错。

2.没加return 0.

重要的事情说三遍:必须要加retrun 0!必须要加retrun 0!!必须要加retrun 0!!!以及:
using namespace std;

3.即为:

int main(){
	int a[20];
	for(int i=1;i<=20;i++){
		cin>>a[i];
	}
	return 0;
}

数组是从0开始的……

4.除以0:

while(n>=0){
	cout<<m/n;
	n--;
}

二、可能会丢分的操作。

1.代码错误。

不说了好吧……

2.TLE。

何为TLE内? 
TLE是指 `Time Limit Eceeded` 。即为:空间限度超限。可能导致的情况:
1.循环次数太多。

计算机在执行 1 0 8 10^8 108以内的操作时是不会超时的。但如果:

for(int i=1;i<=1000;i++){
	for(int j=1;j<=1000;j++){
		for(int k=1;k<=1000;k++){
			a[i][j][k]+=a[i-1][j][k]+a[i][j+1][k]+a[i][j][k+1];
		}
	}
}

TLE和MLE警告 \color{Cyan}\colorbox{Violet}{TLE和MLE警告} TLEMLE

2.搜索未记忆化
//记忆化代码:
int h[100][100];
int dfs(int n,int m){
	if(h[n][m]) return h[n][m];
	h[n][m]=h[n][m+1]+h[n+1][m];
	return h[n][m];
}

三、我总结的一些考试技巧

1.暴力

#include <cstdio>
#include <iostream>
using namespace std;
int main(){
    int sum=0;
    int n;
    scanf("%d",&n);
    for(int a=1;a<=3;a++){
        for(int b=1;b<=3;b++){
            for(int c=1;c<=3;c++){
                for(int d=1;d<=3;d++){
                    for(int e=1;e<=3;e++){
                        for(int f=1;f<=3;f++){
                            for(int g=1;g<=3;g++){
                                for(int h=1;h<=3;h++){
                                    for(int i=1;i<=3;i++){
                                        for(int j=1;j<=3;j++){
                                            if(a+b+c+d+e+f+g+h+i+j==n){
                                                sum++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    cout<<sum<<endl;
    for(int a=1;a<=3;a++){
        for(int b=1;b<=3;b++){
            for(int c=1;c<=3;c++){
                for(int d=1;d<=3;d++){
                    for(int e=1;e<=3;e++){
                        for(int f=1;f<=3;f++){
                            for(int g=1;g<=3;g++){
                                for(int h=1;h<=3;h++){
                                    for(int i=1;i<=3;i++){
                                        for(int j=1;j<=3;j++){
                                            if(a+b+c+d+e+f+g+h+i+j==n){
                                                printf("%d %d %d %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g,h,i,j); 
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }   
    return 0;
}
/*
————————————————
版权声明:本文为CSDN博主「ipraew」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Athena_Oria/article/details/70195522
*/

暴力程序因情况而定。
这 些 仅 为 打 表 , 不 可 作 为 程 序 ! 这些仅为打表,不可作为程序!
俗话说得好:暴力出奇迹,打表过样例! \color{Cyan}\colorbox{Violet}{俗话说得好:暴力出奇迹,打表过样例!}
具体请看:CSP考试技巧——对拍程序

2.骗分。

看这道题: 滴 滴 打 车 滴滴打车
( c a r . c p p ) (car.cpp) (car.cpp)

【问题描述】

轩轩和凯凯准备去卡其米星球找其他小朋友一起玩《我的世界》。滴滴打车推出了“拼车”活动,对于某一目的地,不论一个人坐车去还是一堆人一起去,总共需要支付的钱是一样的(每辆车上除了司机最多坐4人)。
这时,凯凯家门口聚集了很多小朋友,原来他们也都准备带着自己的模组去卡其米星球,假设有 N 位小朋友准备拼车,此时为0时刻,从凯凯家到卡其米星球需要花 D 元打车费,凯凯想在 S 分钟以前(包括第S分钟)到达卡其米星球,因为太晚了模组会坏掉,现在给出S分钟当中所有 K 辆出租车先后达到凯凯家门口的时间Ti及里面剩余座位Zi。
凯凯心里想:“time is money”,凯凯觉得每个人等车的分钟数等同于花了相同多的钱(比如凯凯等了40分钟,相当于他多额外花了40元钱)。
在保证所有小朋友都能在模组损坏前到达卡其米星球的情况下,请你计算他们最少需要花费多少钱?

【输入格式】

输入文件名为 car.in。
第一行,四个整数,N,K,D,S,具体含义参照题目描述。
接下来有K行,每行两个整数Ti和Zi,表示第i辆车在第Ti分钟到达凯凯家门口,空余的座位数为Zi(到达时间已按先后顺序给出)。

【输出格式】

输出文件名为 car.out。
一行,如果所有小朋友能在模组损坏前到卡其米星球,则输出一个整数,代表所有小朋友最少需要花的钱(单位:元),否则请输出“impossible”。

【输入输出样例 1】

car.in	      car.out
2 2 10 5         14
1 1
2 2	

【输入输出样例 1 说明】

2个小朋友坐第2分钟到达凯凯家门口的车,每个人等2分钟,最少花费为10+2*2=14元。

【数据规模与约定】

对于100%的数据,N ≤ 100,K ≤ 100,D ≤ 100,S ≤ 100,1 ≤ Zi ≤ 4,1≤ Ti ≤ Ti+1 ≤ S。

所以,你只要:

#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"impossible"; 
	return 0;
}

就能骗到至少10分。

3.调试DEV-c++

5a6QgK.png
调成这个页面就行啦!

方法:

5a6sbQ.png
把项目管理一栏勾上。再设置断点,慢慢调试。就可以模拟计算机的运行啦!

4.编写生成随机数的程序:c++中如何生成随机数?

这样你在过了样例不放心时,就可以再生成一组数据了!

总 结 不 易 , 点 个 赞 再 走 呗 ! \color{red}总结不易,点个赞再走呗!

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSP(信息学奥林匹克竞赛)复赛的知识点非常广泛,涵盖了计算机科学和算法设计的各个领域。以下是一些常见的CSP复赛知识点: 1. 数据结构:熟悉数组、链表、栈、队列、树、图等数据结构的原理和应用。能够快速选择和实现合适的数据结构来解决问题。 2. 算法设计与分析:掌握基本的算法设计方法,如贪心算法、分治算法、动态规划算法、回溯算法等。了解算法的时间复杂度和空间复杂度分析方法。 3. 图论:熟悉图的基本概念和常见算法,如最短路径算法(Dijkstra算法、Floyd-Warshall算法等)、最小生成树算法(Prim算法、Kruskal算法等)、网络流算法(最大流最小割定理、Ford-Fulkerson方法等)。 4. 字符串处理:熟练掌握字符串的基本操作,并能够应用字符串匹配算法(KMP算法、Boyer-Moore算法等)解决相关问题。 5. 动态规划:了解动态规划的基本思想和应用场景,能够分析并设计动态规划算法来解决问题。 6. 排序与查找:掌握常见的排序算法(如冒泡排序、快速排序、归并排序等)和查找算法(如二分查找、哈希表等)的原理和应用场景。 7. 数学知识:了解离散数学、概率论和组合数学等数学知识,能够将数学方法应用到算法设计中。 8. 算法竞赛技巧:熟悉算法竞赛中常见的问题解题技巧,如递归、分治、二分、模拟、枚举、贪心、搜索、优化等。 在CSP复赛中,不仅需要掌握上述知识点,还需要具备解决难题的思维能力、编程实现能力以及分析和优化算法的能力。通过不断的练习和实践,可以提高自己的算法和编程水平,取得好成绩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值