小细节汇总

在ACM题目中,尽量减少函数调用,减少开销。

1.<cmath>头文件中的pow函数再返回大数据的时候,会出现与标准答案相差-+1的情况(很坑!!),大数据尽量不要用,最好的方法是手写,以hdoj的ACM steps里一道水题为例:         

                  排序


Problem Description

输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。


Input

输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。


Output

对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。


Sample Input

0051231232050775


Sample Output

0 77 12312320

 

Source

POJ


Recommend

Eddy

本人AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 char a[1002];
 7 int c[1002];
 8 int main()
 9 {   while(~scanf("%s",a))
10     {   int i,len=strlen(a),sum=0,st=0,en=0,n=0;
11         for(i=0;i<len;i++)
12         {
13             sum=0;
14             if(a[i]==‘5‘||i==len-1)
15             {   if((i==len-1)&&(a[i]!=‘5‘)) i++;
16                 en=i;
17                 for(int j=st;j<en;j++)
18                 {
19                     sum=sum*10+a[j]-‘0‘;    //开始用pow,大数据会错
20                 }
21                 st=i+1;
22                 if(i==0||a[i-1]==‘5‘)continue;
23                 c[n++]=sum;
24
25             }
26         }
27         sort(c,c+n);
28         for(int p=0;p<n;p++) {cout<<c[p];if(p!=n-1)cout<<" ";}
29         cout<<endl;
30     }
31     return 0;
32 }

第19行处,开始写的是sum+=pow(10,XXXX...);

用pow最后结果可能会出现29999999而答案是30000000的情况,所以还是手写比较安全可靠^_^

2.<cmath>中的sqrt函数虽然好用,但会减缓运行速度:

水题(hdoj ACM steps 2.1.4):

                  七夕节


七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"
人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:

数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
你想知道你的另一半吗?


Input

输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000).


Output

对于每组测试数据,请输出一个代表输入数据N的另一半的编号.


Sample Input

3
2
10
20


Sample Output

1
8
22

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int t,x;
 5 int main()
 6 {   cin>>t;
 7     while(t--)
 8     {   int sum=1;
 9         cin>>x;
10         for(int i=2;i*i<=x;i++)    //初始:i<=sqrt(x);
11         {
12             if(x%i==0) {sum+=i;
13             if(i*i!=x) sum+=x/i;}
14
15         }
16         cout<<sum<<endl;
17     }
18     return 0;
19 }

这水题第10行我用sqrt写竟然TLE你敢信??????

所以说能少用尽量少用吧。

3.printf和scanf的输入输出速度比cin和cout快。

这个似乎是个不成文的规定,各大教辅书上几乎都是printf和scanf写的,似乎有大神曾经测算过,printf比cout快了0.0001秒(数据我口胡的,总之很小就对了),以前做过一道玄学题目,用cin和cout会TLE但是printf和scanf就过了。

总之算法感觉没问题,居然TLE的时候尝试把cin和cout改成printf和scanf试试,说不定就AC了呢~

                                                  2018.6.3       —————今天又被自己菜醒

原文地址:https://www.cnblogs.com/sinphone19/p/9127865.html

时间: 2024-10-16 00:55:18

小细节汇总的相关文章

web前端体系-了解前端,深入前端,架构前端,再看前端。大体系-知识-小细节

1.了解前端,深入前端,架构前端,再看前端.大体系-知识-小细节 个人认为:前端发展最终的导向是前端工程化,智能化,模块化,组件化,层次化. 2.面试第一关:理论知识. 2-1.http标准 2-2.w3c标准 2-3.ECMAScript标准 3.框架和类库 4.编码开发 5.运行环境 6.自我修养. 6-1.前端开发思维.敏捷软件开发流程(如SCRUM)和项目管理知识(如考取PMP). 6-2.个人github和技术博客.建立开源项目等总结经验和反思感想. 6-3.研究学习Web相关最新知识

apache配置虚拟主机时需要注意到几个小细节

如今apache在web服务器这块市场占有率还是很高的,而配置虚拟主机现在也是用的非常多,不过在配置虚拟主机的时候一定要注意几个小细节. 首先要注意你的apache版本,注意是2.2还是2.4的. 配置2.2的时候,配置虚拟主机该这样写: NameVirtualHost ip:80   //注意此处与2.4不同 <VirtualHost ip:80> ServerName www1.myweb.com DocumentRoot "/myweb/vhost/www1" <

关于if语句中的小细节

if语句都会用,但是有一些小细节并不容易被发现. 比如我们不应该写这样的代码: if(flag==0) flag为布尔变量,布尔变量的值为真或假,用0表示假,真是多少是不一样的. 所以我们应该避免将布尔变量与0或1这样的整型值进行比较. 那么我们也不应该写这样的代码: if(i) i为一个整型变量,但是写成上面那样就会被人误以为是布尔值,良好的编程习惯是这样的: if(i==0)或if(i!=0) 还有重要的一点是,我们不能将float型和double型数据与0这种整型变量进行==或!=. 因为

强壮你的C和C++代码30个小细节

1 初始化局部变量 使用未初始化的局部变量是引起程序崩溃的一个比较普遍的原因, 2 初始化WINAPI 结构体 许多Windows API都接受或则返回一些结构体参数,结构体如果没有正确的初始化,也很有可能引起程序崩溃.大部分Windows API结构体都必须有一个cbSIze参数,这个参数必须设置为这个结构体的大小. 注意:千万不要用ZeroMemory和memset去初始化那些包括结构体对象的结构体,这样很容易破坏其内部结构体,从而导致程序崩溃. 3 检测函数输入参数有效性 在函数设计的时候

注意编码工作中的小细节

人们常说"细节决定成败". 编码工作中,同样需要关注细节. 本文将给出3个小实例来说明编码中关注细节的重要性,同时给出作者对如何注意编码细节的一点见解(说的不对,请指正). 例1 这个问题如此地显而易见,竟然没有被发现. List<int> numList = new List<int>(); numList.Add(3); numList.Add(1); numList.Add(4); numList.Add(2); numList.Add(5); numLi

python isinstance 判断各种类型的小细节

1. 基本语法 isinstance(object, classinfo) Return true if the object argument is an instance of the classinfo argument, or of a (direct, indirect or virtual) subclass thereof. Also return true if classinfo is a type object (new-style class) and object is

[小细节,大BUG]记录一些小问题引起的大BUG(长期更新....)

[小细节,大BUG]  1. 在不久前,一个朋友出现了这样一个BUG:当UITableView加载cell的时候,自定义的cell,怎么显示,里面的文字总是显示不完全(注意,文字不长).然后,我帮忙给看了下,甚至把在storyBoard中将cell的相关属性都试了下,虽然可以解决,但是效果不理想.最终经过排查,终于发现问题所在:当自定义cell时,因为需要布局子控件,所以他重写了layoutSubviews方法,然而在此方法中没有调用[super layoutSubviews],所以造成了布局混

Python 的lambda表达式的一些小细节

温故而知新,无意中发现以前实验lambda的时候写的测试代码,第一个反映就是,这是我写的????!!! 呵呵,想想XX语言刚把lambda正式加进去,python早早支持了,我可以大喊一声”Python是最好的语言“来找找骂吗? 哈哈. 不过,自从有了lambda,很多代码一行搞定.不过还是有很多不为一般人注意的小细节,详见下面代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3

C++在使用Qt中SLOT宏须要注意的一个小细节

大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类假设覆写,在基类指针或者引用来指向子类的时候会实现动态绑定. 但假设指针去调用非虚函数,这个时候会调用C++的静态绑定,去推断当前的指针是什么类型,就去运行哪个类型的函数. 非常有一种比較经典的使用方法,就是Template Method模式,基类定义一个非虚的算法框架,里面详细定义一些纯虚的函数片段,由子类来进行实现,从而实现了控制整体框架,但能够给客户自由定制的灵活性.这个使用方法事实上就是指针去调用了基类的方法,由方法的扩展之后