首页
学习
活动
专区
圈层
工具
发布

【算法基础篇】(四十八)突破 IO 与数值极限:快速读写 +__int128 实战指南

一、快速读写:IO 超时的 “救命稻草” 在算法竞赛中,很多选手会遇到 “算法正确但超时” 的窘境,其中八成是 IO 效率太低导致的。...快速读写的核心思路是 “绕过冗余层,直接操作字符流”: 字符流直接处理:整数在计算机中本质是字符序列(如 “123” 是字符 '1'、'2'、'3' 的组合),通过getchar()逐个读取字符,putchar...long sum = 0; for (int i = 0; i < n; ++i) { sum += read(); // 快速读入n个整数并求和 } cout...1.5 实战例题:洛谷 P10815 【模板】快速读入 题目链接:https://www.luogu.com.cn/problem/P10815 题目分析 题目描述:输入 n 个整数,求和并输出结果。...} // 快速读入n(避免混用IO函数) LL sum = 0; for (int i = 0; i < n; ++i) { sum += read(); // 快速读入超大数并累加

15710

5. 很“迷”的字符与字符串

正确的修改方法是将char height; 改为unsigned char height; ,通过指定是否为有符号数来解决这个问题。...3.2 输入操作原理 gets()用于从标准输入流stdin读入一个整行 (以\n或EOF) 结束,写入ptr指向的字符数组,并返回这个指针;出错或遇到文件结束时则返回NULL。...getchar()用于从标准输入流stdin读入一个字符,并返回这个字符。如果读到文件结尾,则返回EOF。注意到EOF不能用char类型表示,所以getchar()函数返回的是一个int型的数。...某些编译器(如VC6)支持用 fflush(stdin) 来清空输入缓冲,但是并非所有编译器都要支持这个功能(如linux 下的gcc),因为标准中根本没有定义 fflush(stdin),所以这种方法的移植性不是很好不建议使用...3.4 举例说明 使用 scanf()和getchar()输入读入字符的示例如下所示 ? 执行上面的代码可以获得如下的结果 ?

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    各种读入方式速度比较

    以前写过一篇比较scanf与cin的博客,但是那篇博客存在很多bug,测速也很不规范。...今天我收集了一下众大佬的读入优化,来做个比较 特别鸣谢:my,zyh,hzwer,lyq 首先看一下各位大佬的读入优化 my(这是个超级大蒟蒻) 这是我自己yy着写出来的,虽然长得丑,但是也不快 1 inline...} 学姐的读入优化写法应该是介于我和hzwer之间的,而且用了isdigit黑科技 hzwer 1 inline int read() 2 { 3 int x=0,f=1;char c=getchar...*10+c-48,c=getchar(); return x*f; 6 } AG爷的读入优化,不知道速度怎么样 cin cin+ios优化 scanf (我仨是来打酱油的) fread 1 inline...总结 通过上面三组测试,各种读入方式的快慢已经比较清晰了 如果按照评分的话大概可以总结为 cin<cinios≈scanf<my≈zyh<hzwer<fread

    1.1K40

    【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(六)

    主包学习能力比较一般,学起语言、算法无论是花费的时间精力还是取得的成效和大佬们完全无法比。...(); //光标的闪烁 // //读取一个字符 // //输入一个字符,输出 //getchar只针对字符,只能读字符 //putchar只能输出字符 getchar//读取 putchar//输出 #...每个占位符都对应一种数据类型,并控制如何将变量转换为字符串进行显示或读取。 (1)常见的输出占位符 以下是一些常用的输出占位符及其用途: %d 或 %i:用于输出十进制整数。...%l:用于表示长整型(如 %ld)或双精度浮点数(如 %lf)。 %L:用于表示长双精度浮点数(如 %Lf)。 %%:用于输出一个百分号本身。...%c:读入一个字符。 %s:读入一个字符串,遇到空格、制表符或换行符时停止。 %p:读入一个指针。 %o:读入八进制整数。 %x 或 %X:读入十六进制整数。

    15710

    Text Reverse HDU - 1062 字符串处理,空格切分。

    Hint Remember to use getchar() to read '\n' after the interger T, then you may use gets() to read a...该题目的意思就是说要字符串反转,也就是说对于用空格分开的每一个字符串,需要对这个单独的字符串执行反转操作,这是我最初的理解,即每个字符串中间有一个空格,但是,事实上,这并不一定是符合正确格式的句子,所以...include #include using namespace std; int main() { int n; cin >> n; int temp = getchar...start; j--) { cout << str[j]; } } i++; } cout << endl; } return 0; } 重点:cin在读入数据之后...,会停留在行末进行等待,这时候,如果使用getline,等读入时,读入的是换行符,而不是下一行字符,当然,这也是cin读入数据比较慢的原因,没读完一行数据,就要等待,而不是直接进入下一行读取。

    52610

    C语言中的字符串处理

    如: char *p;p = "abc";这个赋值操作不是复制 "abc" 中的字符,而仅仅是使 p 指向字符串的第一个字符。...如果编写自己的字符串处理函数,请千万注意要正确地处理空字符。 假设需要变量用来存储最多80个字符的字符串。既然字符串会在末尾处需要空字符,那么要声明的变量是含有81个字符的数组。...字符数组与字符指针 一起来比较一下下面两个声明: char date[] = "June 14";它声明date是个字符数组。...如: char str[] = "Are we having fun yet?";printf("Value of str: %s\n", str);如果只显示字符串的一部分,可以用 %.ps。...可以参考下面的例子: int read_line(char strp[], int n){ char ch; int i = 0; while((ch = getchar()) !

    1.5K30

    switch语句的用法实例

    程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。   ...();         //第二次是读入的一个换行符,而不是输入的字符,因此需要加一个getchar() 吃掉换行符     switch(i){         case'm':            ...(如2004年就是闰年,1999年不是闰年); 世纪年(能被100整除的年份)能被400整除的是闰年。...;      if((month12)){          printf("data error");      }      else            //在月份输入正确的情况下判断闰年并计算天数...               System.out.println("data error");              }              else            //在月份输入正确的情况下判断闰年并计算天数

    2.1K20

    刷题老超时?那是因为你不会开挂

    2、某些特殊场景导致死循环,这种比较难排查,可以生成一些样例跑一跑,说不定有惊喜哦。 3、语言的特性,比如java确实比c慢,但一般平台对不同语言的超时限制不一样。...这次我的实现里面可能会比较耗时的点:一是用了动态申请内存,二是用了cin流读入。很快就定位了原因,还真是这个读入方式导致的。...其实在读入方式上还是有点技巧的,不知你有没有听过一种方式,叫快读,俗称开挂。 03 读入方式 3.1 cin c++常用的方式是用cin\cout进行输入输出,比如像这样。...scanf("%d", &a); 3.3 getchar 还有一种更快的方式,就是常说的快读,用getchar按字符读取,再转为数字。...即先读入内存中,再直接从内存里取。

    65810

    c语言中getchar的运用_c语言中gets和getchar

    ,gets()就不会等待从键盘键入字符,而 是会直接取走这个“无用的” 回车符,从而导致读取有误 3. getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab) getchar()使用不方便...=’\n’); (2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要 包含头文件 4....【转】 getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数 据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入...键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个 字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符...个字符.如果需要 取消’\n’的影响,可以用getchar();来清除,这里getchar();只是取得了’\n’但是并 没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符.还要注意的是这里你在键盘上输入

    4.1K20

    C语言程序设计核心详解 第三章:顺序结构,printf(),scanf()详解

    includemain(){输入计算输出}2.标准输出输出函数标准输入输出函数使用前必须加上对应的头文件2.1 printf()函数,标准输出printf函数有两种格式,一种是原模原样输出,一种是输出读入的值格式...1:printf("格式控制");功能:按格式控制指定的格式输出数据.如:printf("a=7,b=10");显示如下:a=7,b=10格式2:printf("普通/占位符",输出列表的值);功能:按格式将值输出什么叫普通...什么叫占位符普通就是无%,占位符就是有%普通字符按照原样输出,占位符以%开始,被替换输出值,先计算后输出如:printf("a=%d,b=%d",3,4+7);显示如下:a=3,b=11;2.1.1 printf...输出一个字符,不输出单引号s 输出一个字符串 输出时不输出双引号f 输出一个实型数.隐含输出6位小数E或e 输出指数形式的实型数2.2 scanf(),标准输入格式:scanf("普通/占位符",地址列表);如:...()格式:getchar()功能:接收一个从键盘输入的字符getchar()没有任何参数,函数的返回值就是输入的字符,意味着getchar可以读入回车空格等等

    49310

    最通俗易懂地讲解scanf、gets和getchar的区别

    .); 从 标准输入流(stdin) 中按照说明的格式读入多个字符,并存入 ==以输入参数的值为地址的变量== 中,所以必须得有 &,除了把字符串读入字符数组中。 为啥?...比如最近在做PTA上的C语言题库时发现的一个题: 给定 n 本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。...flag2].name); return 0; } 首先使用 scanf 输入的书的数量3,留下了一个 回车,如果在这里直接接着使用一个 scanf 的话,就会出错: 因为 回车 会留在缓存流中,并被下一个函数...不过,无论是对待字符还是字符串,scanf 的处理都是比较相似的,这一点倒是比较容易学习和使用,但是 来自 pudn,只有一段开头话: 中文版本:在数据大量的情况下,用 gets 读取快于 scanf(...---- 除了 回车 就是 空格 的问题了,gets 是接收 空格 的,也就是可以读取并输出 空格。

    7.4K31
    领券