清华OJ,一点刷题经验

清华大学公选课数据结构A作业范围查询:http://dsa.cs.tsinghua.edu.cn/oj/problem.shtml?id=936

花了接近一周时间,终于搞定了这题作业。作业并不难,但是无论我如何改进代码总是超时,导致我一度放弃。今天终于做出来了,对C++的输入输出有了全新的认识。

此前用自己的方法写下了C++代码,但无奈总是超时,于是在网上搜到了这篇博客:http://blog.sina.com.cn/s/blog_59fa585c0102v2el.html

我几乎照着代码改了一遍,却依然超时,百思不得其解。我甚至用自己的代码和这份代码做过profile分析,关键步骤耗时相差无几。最终当我偶然将cout换成printf后就通过了,由此也可以看出不仅是cin慢,cout也很慢。

用vs做的profile:

输入方面尽管换成了scanf,但依然占用了70+%的时间。

而在清华的OJ上的测试应该含有很多的cout,但题目中并未指出这一点,下图是改cout之前和之后的比较,竟有超过50%的提升。

时间: 2024-10-29 19:07:17

清华OJ,一点刷题经验的相关文章

LeetCode - 刷题经验

1.加快代码速度 刷了前面几道题发现速度总是处于尾部10%,刚开始非常不服,后来仔细一看那些排名靠前的提交,发现了猫腻.几乎每一个提交都有这样的一段代码: static const auto io_sync_off = []() { // turn off sync std::ios::sync_with_stdio(false); // untie in/out streams std::cin.tie(nullptr); return nullptr; }(); 啥意思?看拆分的这几部分解析

OJ期末刷题 Problem I: C/C++经典程序训练3---模拟计算器

Description 简单计算器模拟:输入两个整数和一个运算符,输出运算结果: Input 第一行输入两个整数: 第二行输入一个运算符(+.-.*./); Output 输出对两个数运算后的结果: Sample Input 30 50 * Sample Output 1500 代码: #include <iostream> using namespace std; int main() { int a,b; double c; char d; cin>>a>>b; c

OJ期末刷题 问题 B: 求三角形面积-gyy

题目描述 输入三条边的长度,如果这三条边能构成三角形,则需要计算三角形面积,如果不能构成三角形则输出提示信息 "error input".输出的面积按两位小数方式输出 输入 三条边的长度 输出 如果这三条边能构成三角形,则输出该三角形面积,如果这三条边不能构成三角形,则输出提示信息"error  input" 样例输入 3.3 4.4 5.5 样例输出 area=7.26 提示 输出面积时保留两位小数 代码: #include <iostream> #i

leetcode刷题经验——编程语言:Java

1.两数之和(难度:简单) (1)Java数组 动态初始化:数据类型[] 数组名称=new 数据类型 [长度] 键盘输入方法: 方法一(不限制输入数组的长度): Scanner sc = new Scanner(System.in);  String str = sc.next().toString();  String[] arr  = str.split(",");  int[] b = new int[arr.length];  for(int j = 0; j<b.len

刷题方法论

[转自一亩三分田]谈谈面试官在面试coding题目时的考察终点与心理活动 本人简介: 曾经微软dev, 35+, 10年经验, 有FLG offer.  去年加入一个start up 公司, 最近前景不明, 在犹豫要不要去个稳定点的大公司.  我从sde开始面试其他人, 到现在估计面试过100+人次的面试和debrief. 我面过coding, problem solving, design, behavior.  本帖子只谈论纯粹coding, 视情况讨论要不要再开帖子讨论其他方面. 本文涉及

停课刷题总结-给自己一点鼓励吧

嗯,我已经停了四五天课在家刷BZOJ准备复赛了,感觉压力好大.但是,实际上感觉效率并不高,每天就是7-8题的样子,而且并不是每题都有质量.而且这几天刷下来,我貌似因为刷了太多水题的关系,打字写题的速度变慢了,有一点悠闲没有紧迫感了,要赶快把这个习惯给改掉!今天去学校做题被虐了,竟然一个简单的Hash没有调对[虽然我现在还是不知道为什么会死循环QAQ.]感觉吧,可能因为刷题有点不在状态了.[其实也因为刷题的间隙玩了几盘LOL,游戏这东西QAQ]被虐了,感觉很不爽,有点难受,毕竟我付出了那么多努力,

基于C#解决OJ刷题之输入输出问题的总结(AKOJ1064-1071A+B问题汇总)

声明:题目部分为akoj题目,代码为本人AC代码. 因为本人学校的oj支持各种环境,非常正常的当中就包括了C#.然暑假在家较为空暇,本着学习C#和复习算法的态度和目的,就又開始折腾起oj了. 题目部分是最基础的A+B系列,来看看C#的输入输出是怎么一回事吧 题目地址:http://183.167.205.82:8081/JudgeOnline/problemlist?volume=1 本文由csdn-jtahstu原创.转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:137375842

OJ刷题常用的4中基本输入形式

初到OJ网站上刷题,输入形式就是我们要考虑的问题.通过自己的一些摸索,OJ题目的输入形式大体上无外乎4种.下面就详细介绍: 1 输入数据文件中,第一行数据标明了测试数据的数目: 2 输入数据文件中,有标明输入结束的数据 3 输入数据文件中,测试数据一直到文件尾 4 没有输入数据 第1中情形的处理方法: //int i,kase scanf("%d",&kase); for(i=1;i<=kase;i++) { //处理第i中情况 } ...................

第十六周oj刷题——Problem C: B 求类中数据成员的最大值-类模板

Description 声明一个类模板,类模板中有三个相同类型的数据成员,有一函数来获取这三个数据成员的最大值. Input 分别输入3个整数,3个浮点数,3个字符 Output 3个整数的最大值 3个浮点数中的最大值 3个字符中的最大值 Sample Input 9 5 6 1.1 3.4 0.9 a b c Sample Output 9 3.40 c /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 6 月 25 日