1?咳咳2年以来学了些啥

来源:互联网 发布:c语言 取消包含头文件 编辑:程序博客网 时间:2024/06/05 03:57

  • 改错本
    • 必须剁手的错误
      • 头文件
      • 等号
      • long long
    • 我是谁我在哪我在做什么
      • 数组越界
      • 清零
      • 读入换行
  • 算法总结
    • 搜索
      • 深搜
      • 广搜
    • 贪心

NOIP在半期后第一天。尽管半期考试已经使我丧失了思考的能力……

改错本

必须剁手的错误

头文件

由于编译器的原因,某些头文件没打,却没有报错……
以下几个头文件不管怎么先打上:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;

等号

学了那么久,却仍然会这样打:

if(a=b)    printf("Maybe there's something wrong.");

可怕的是,C允许我们这样写【手动吐血】……

long long

该用的时候还是用吧……
(我不会告诉你我现在想把所有整形变量定义成long long)

我是谁我在哪我在做什么

数组越界

看这段代码:

#define MAXN 105//我把数组开大了的哦~int C[MAXN][MAXN];void init(){    C[1][1]=1;    for(int i=2;i<=MAXN;i++)        for(int j=1;j<=i;j++)            C[i][j]=C[i-1][j]+C[i-1][j-1];}//不要在意我写错没有

第6行那个刺眼的i<=MAXN,让你的程序和人直接崩溃。

清零

你的vis清零了吗?你的cnt清零了吗?你的ans清零了吗?你的各种该清0的、该清1的清了吗?
以后只要有这种:

while(~scanf("%d%d",&N,&M)){}

或者是这种:

while(1){    scanf("%d%d",&N,&M);    if(!N&&!M) break;}

一定要加上诸如:

ans=0;memset(vis,,0,sizeof vis);memset(Edge,0,sizeof Edge);

读入换行

每当题目的输入中有字符型时,一切都变得朦胧起来……

说白了就是空格和换行符被莫名其妙地读进去了。
接下来总结一下:
scanf
当读入字符串时:读到制表符(空格、换行等)时结束,且不会把制表符读入;
当读单个字符时:什么都会读。
gets:不要用!不要用!不要用!
fgets:读入一行字符串,遇到空格会继续读,且把空格储存下来,遇到换行停止,且会把换行读入进去。
getchar:读入任意一个字符。

算法总结

搜索

枚举枚上天,暴力出奇迹 ——题记

深搜

void dfs(参数){    if(边界)    {        记录结果        return;    }    for(枚举这一步的所有情况)        if(没有访问过)        {            标记            dfs(改变参数);            //取消标记        }}

广搜

queue<node> Q;//定义在外面,自动清零void bfs(){    Q.push(初始状态);    标记初始状态//注意!!    while(!Q.empty())    {        node t=Q.front();        if(t为最终状态) 输出结果        for(枚举t可以得到的状态)            if(没有访问过)            {                标记                Q.push(这个状态);            }        Q.pop();    }}

广搜写得少,例题:【NOI2001】聪明的打字员

贪心

贪心只能过样例 ——题记

原创粉丝点击