zoukankan      html  css  js  c++  java
  • 写给要考c++的同学

    貌似大家都对 信息考试/ap计算机 很虚啊,那我撸一篇博客来帮大家复习一下c++的基础操作吧

    c++是一种面向对象的语言,但是必修的信息考试不会考面相对象的内容

    晚自习撸出来的写得很乱,但都是精华,看不懂的可以评论区私戳我。

    手机已经放起来了所以不会及时回复微信和qq的消息。


    先复习一下吧

    信息考试ak常用框架

    #include<iostream>//引入iostream函数库
    using namespace std;//定义std命名空间
    int main()//主函数
    {
    //你的代码
    }
    /*可能有人想问我ak是什么,我们学信竞的,每天都要写题,题目提交在oj(online judge)上面,评判对错,对了就是accept,简称AC。有时候一条代码调了一个下午,一天,一个星期,经过无数次wrong之后终于能accept了,就会说AC,有时候AC一道题激动到忘记吃饭也是日常。在模拟赛的时候,我们会有四道题限时四个小时。在经过四个小时的掉头发之后,评测结果出来,四道题全部AC(当然这种情况极少发生),那我们就说那个人AK了。大概就是拿着一把AK47自动步枪突突突突突突把所有题秒杀了。*/

    (可能有人不知道/*你要注释的内容*/)

    所以我们来谈谈c++的小技巧;

    cin>>x;

    x可以是int,char,string,long long,double,float类型

    可以说是非常好用了,但是cin为了兼容那么多类型,时间上慢了很多,我不知道信息考试有没有程序运行时间限制,如果有的话最好还是用scanf()函数;

    没给数字个数,读入一行数字到结束

    这个问题常用于多组数据的时候,可以用while(cin>>x)或while(cin>>a[i++])解决,一个是用一个变量记录,一个是用数组记录历史信息。

    当然用scanf的话就是while(scanf(”你的类型“,&a)!=EOF)或者while(~scanf(”类型“,&a))

    死循环

    while(1)或while(true)

    记住一定要写循环边界,不然程序就卡死了

    然后就是,你想要写程序之前,你要先自己把题目给的样例用笔算出答案,然后让程序来模拟你的思考过程,最后自己出一些数据,确保程序的正确性。

    以下是给ap计算机的同学的

    ------------------------------

    stl模板

    这是个开挂一样的东西

    sort

    sort用于排序,在数据不同时采取的排序算法也不同。

    sort包含在头文件#include<algorithm>

    我们要把一个数组a[100]从小到大排序

    那么就是sort(a,a+100);运行完之后,a数组就已经被排好续了。

    如果要从大到小排,我们常用的方法是吧sort函数的<重载成>号,就是说重载后的sort里,它会认为1比100大,自然就从大到小排序了;

    重载后的写法:

    bool cmp(int x,int y)//cmp原本为取x和y中的较小值,我们该为最大值

    {return x>y;}

    sort(a,a+100,cmp);

    queue

    还在手写队列吗?如果不参加信息学奥赛的省队选拔,那就用stl吧

    #include<queue>

    queue<int >a;

    a.push();放入a

    a.pop();出队

    a.front();取队首

    #include<stack>

    stack<int>a;

    a.push();

    a.pop();

    a.top();

    还有一个神器,优先队列,priority_queue

    #include<queue>

    #include<algorithm>

    priority_queue<int>a;

    a.push();

    a.pop();

    a.front();

    //优先队列不是队列,因为它是个二叉最大堆。。。

    被放入优先队列的元素会自动排好序(默认从大到小),并且使用的是堆排序,节约大量时间。


    高精度,下面的模板背熟就好了,随便用

    struct bign    
    {    
        int len, s[MAXN];    
        bign ()    
        {    
            memset(s, 0, sizeof(s));    
            len = 1;    
        }    
        bign (int num) { *this = num; }    
        bign (const char *num) { *this = num; }    
        bign operator = (const int num)    
        {    
            char s[MAXN];    
            sprintf(s, "%d", num);    
            *this = s;    
            return *this;    
        }    
        bign operator = (const char *num)    
        {    
            for(int i = 0; num[i] == '0'; num++) ;  //去前导0    
            len = strlen(num);    
            for(int i = 0; i < len; i++) s[i] = num[len-i-1] - '0';    
            return *this;    
        }    
        bign operator + (const bign &b) const //+    
        {    
            bign c;    
            c.len = 0;    
            for(int i = 0, g = 0; g || i < max(len, b.len); i++)    
            {    
                int x = g;    
                if(i < len) x += s[i];    
                if(i < b.len) x += b.s[i];    
                c.s[c.len++] = x % 10;    
                g = x / 10;    
            }    
            return c;    
        }    
        bign operator += (const bign &b)    
        {    
            *this = *this + b;    
            return *this;    
        }    
        void clean()    
        {    
            while(len > 1 && !s[len-1]) len--;    
        }    
        bign operator * (const bign &b) //*    
        {    
            bign c;    
            c.len = len + b.len;    
            for(int i = 0; i < len; i++)    
            {    
                for(int j = 0; j < b.len; j++)    
                {    
                    c.s[i+j] += s[i] * b.s[j];    
                }    
            }    
            for(int i = 0; i < c.len; i++)    
            {    
                c.s[i+1] += c.s[i]/10;    
                c.s[i] %= 10;    
            }    
            c.clean();    
            return c;    
        }    
        bign operator *= (const bign &b)    
        {    
            *this = *this * b;    
            return *this;    
        }    
        bign operator - (const bign &b)    
        {    
            bign c;    
            c.len = 0;    
            for(int i = 0, g = 0; i < len; i++)    
            {    
                int x = s[i] - g;    
                if(i < b.len) x -= b.s[i];    
                if(x >= 0) g = 0;    
                else    
                {    
                    g = 1;    
                    x += 10;    
                }    
                c.s[c.len++] = x;    
            }    
            c.clean();    
            return c;    
        }    
        bign operator -= (const bign &b)    
        {    
            *this = *this - b;    
            return *this;    
        }    
        bign operator / (const bign &b)    
        {    
            bign c, f = 0;    
            for(int i = len-1; i >= 0; i--)    
            {    
                f = f*10;    
                f.s[0] = s[i];    
                while(f >= b)    
                {    
                    f -= b;    
                    c.s[i]++;    
                }    
            }    
            c.len = len;    
            c.clean();    
            return c;    
        }    
        bign operator /= (const bign &b)    
        {    
            *this  = *this / b;    
            return *this;    
        }    
        bign operator % (const bign &b)    
        {    
            bign r = *this / b;    
            r = *this - r*b;    
            return r;    
        }    
        bign operator %= (const bign &b)    
        {    
            *this = *this % b;    
            return *this;    
        }    
        bool operator < (const bign &b)    
        {    
            if(len != b.len) return len < b.len;    
            for(int i = len-1; i >= 0; i--)    
            {    
                if(s[i] != b.s[i]) return s[i] < b.s[i];    
            }    
            return false;    
        }    
        bool operator > (const bign &b)    
        {    
            if(len != b.len) return len > b.len;    
            for(int i = len-1; i >= 0; i--)    
            {    
                if(s[i] != b.s[i]) return s[i] > b.s[i];    
            }    
            return false;    
        }    
        bool operator == (const bign &b)    
        {    
            return !(*this > b) && !(*this < b);    
        }    
        bool operator != (const bign &b)    
        {    
            return !(*this == b);    
        }    
        bool operator <= (const bign &b)    
        {    
            return *this < b || *this == b;    
        }    
        bool operator >= (const bign &b)    
        {    
            return *this > b || *this == b;    
        }    
        string str() const    
        {    
            string res = "";    
            for(int i = 0; i < len; i++) res = char(s[i]+'0') + res;    
            return res;    
        }    
    };    
        
    istream& operator >> (istream &in, bign &x)    
    {    
        string s;    
        in >> s;    
        x = s.c_str();    
        return in;    
    }    
        
    ostream& operator << (ostream &out, const bign &x)    
    {    
        out << x.str();    
        return out;    
    }    

    搜索模板

    dfs(node a)

    {

    是否搜到终点?-》结束或继续

    搜索这个状态能连接的其他状态。

    处理这个状态

    return ;

    }


    bfs()

    {

    queue<node>a;

    a.push(起点);

    while(!a.empty())

    {

    node now=a.front();

    a.pop();

    把now能连接到的状态放到a里

    处理a的信息

    }

    }

    好了大概就这些,应该不会考更难的东西,祝大家rp++吧,期末AK虐场。


  • 相关阅读:
    Redis "MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"问题的解决
    素描
    python 标准库
    Python内置函数filter, map, reduce
    Python的lambda表达式
    python中super关键字的用法
    python一个注意的地方
    python中self,cls
    python中的实例方法、静态方法、类方法、类变量和实例变量
    python模块及包的导入
  • 原文地址:https://www.cnblogs.com/sherrlock/p/9525788.html
Copyright © 2011-2022 走看看