• 快读的模板


    快读快写的原理就是利用getchar()和putchar()巨快的特点进行读入,cin、cout就不说了,听说它比scanf还快,很厉害的。

    正常版的话就是利用getchar()读入,对读到的数字处理:

     1 #include<string>
     2 #include<cstring>
     3 #include<cstdio>
     4 //我也不知道是哪个头文件
     5 inline void write(int x)  
     6 {  
     7     if(x<0) putchar('-'),x=-x;  
     8     if(x>9) write(x/10);  
     9     putchar(x%10+'0');  
    10 }
    11 inline int read()
    12 {
    13     int x=0;
    14     char ch=getchar();
    15     while(ch>='0'&&ch<='9')
    16     {
    17         x=(x<<1)+(x<<3)+ch-'0';
    18         ch=getchar();
    19     }
    20     return x;
    21 }
    View Code

    这个快读是只针对非负整数的,负数的话读入的就是0,但是用的时候还可以判断一下是否为负嘛,不要这么死板。

    这个快写是只针对整数的,如果输出空格的话直接写putchar(32),输出换行的话直接写putchar(10),这两句也是可以放在for(;;)的第二个分号后面的(人有多大胆,for有多大产),有时可以少写一对大括号的。

    下面的属于那种有模板我也不会背的,巨长无比

    /*inline int Read()
    {
        int F=1,Num=0; //F是记录数字是否为负数,Num存储读入的数字
        char ch=getchar(); //getchar()读取一个字符
        while(!isdigit(ch)) //isdigit()判断是否为数字
        {
            if(ch=='-') F=-1; //如果读入的字符是符号,标记F
            ch=getchar(); //继续读字符
        }
        while(isdigit(ch)) //如果当前读入的字符是数字,则将整个数字全部读入
        {
            Num=Num*10+ch-'0'; //将读入的ASCII字符转换为数字
            //或者上面的代码可以这样写:Num=(Num<<1)+(Num<<3)+ch-'0';
            ch=getchar(); //读取下一个字符
        }
        return Num*F; //将读取完毕的字符返回
    }*/
    /*inline long long read()
    {
        long long F=1,Num=0; //F是记录数字是否为负数,Num存储读入的数字
        char ch=getchar(); //getchar()读取一个字符
        while(!isdigit(ch)) //isdigit()判断是否为数字
        {
            if(ch=='-') F=-1; //如果读入的字符是符号,标记F
            ch=getchar(); //继续读字符
        }
        while(isdigit(ch)) //如果当前读入的字符是数字,则将整个数字全部读入
        {
            Num=Num*10+ch-'0'; //将读入的ASCII字符转换为数字
            //或者上面的代码可以这样写:Num=(Num<<1)+(Num<<3)+ch-'0';
            ch=getchar(); //读取下一个字符
        }
        return Num*F; //将读取完毕的字符返回
    }*/

     下面的快读利用了更快的fread();由于它的机制是一下子输入许多字符,所以对于有数字又有

    /*
    char buf[1<<15],*fs,*ft;
    inline char getc(){
      return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:* fs++;
    }
    inline int In()
    {
        int This=0,F=1; char ch=getc();
        while(ch<'0'||ch>'9')
        {
            if(ch=='-') F=-1;
            ch=getc();
        }
        while(ch>='0'&&ch<='9')
        {
            This=(This<<1)+(This<<3)+ch-'0';
            ch=getc();
        }
        return This*F;
    }*/
  • 相关阅读:
    Linux命令行界面使用代理上网
    .NET 开发框架 代码生成器
    如何正确地学习
    Ubuntu实用命令——不断更新中......
    MSSQL如何快速清除数据库日志转,经实践有效
    C# 获取机器码
    C#中得到每周,每月,每季,每年的年初末日期
    asp.net(C#)解析Json的类代码
    由拖库攻击谈口令字段的加密策略(数据库加密)
    用sql查询当天,一周,一个月的数据
  • 原文地址:https://www.cnblogs.com/qywyt/p/9066811.html
Copyright © 2020-2023  润新知