程序书写过程中的一些小技巧:
1. freopen(“1.txt”,”r”,stdin); //程序运行后系统自动输入此文档里面的内容(不需要进行手动输入)
freopen(“1.txt”,”w”,stdout); //程序输出的内容保存在此文件里
2. memset(a,0,sizeof(a)); //数组的初始化。一般定义一个数组都要初始化
数组定义int a[10] 为全局变量的话,其全部元素默认赋值为0;整型数据默认为0,字符串默认为空。
3. #define max 0x0ffffff; //max 为正无穷
#define min -0x0ffffff;
4. 多组测试数据使用 while(n--){ 程序 }
5. 一般用C语言节约空间,要用C++库函数或STL时才用C++;
cout、cin和printf、scanf最好不要混用。而且需要注意的是,如果题目是大规模数据的输入输出,尽量使用printf和scanf,数据量一大,速度明显比c++的输入输出快。 输出1000000个数据,cout 大概用6s printf 用了0.562s
6. 有时候int型不够用,可以用long long或__int64型(两个下划线__)。
值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。
printf("%I64d",a);
printf("%lld",a);
7. OJ判断是只看输出结果的。
所以大部分题处理一组数据后可以直接输出,就不需要用数组保存每一个Case的数据。
8. 纯字符串用puts()输出,会增快速度。
9. 先用scanf(),再用gets()会读入回车。scanf("%c%c",&c1,&c2) 后者会读入空格和回车;要使用getchar()吸收空格和回车的录入,使用c语言读字符和字符串一定要十分小心。尽量写好就自己输出一下看看是否是自己需要的值被读入。
10. 读到文件的结尾,程序自动结束
while( ( scanf(“%d”,&a) ) != -1 )
while( ( scanf(“%d”,&a) ) != EOF)
while( ( scanf(“%d”,&a) ) == 1 )
读到一个0时,程序结束
while( scanf(“%d”,&a) &&a)
读到多个0时,程序结束
while( scanf(“%d%d%d”,&a,&b,&c)&&a+b+c ),该方法不能读取负值。
11. 圆周率=cos(-1.0) 自然对数=exp(1.0)
12. 如果要乘或除2^n,用位移运算速度快。a>>n;a<<n; 如:求n^m 时间复杂度log(m)
int calc(int n,int m){
int re=1;
while(m){
if(m&1)
re*=n;
n*=n;
m>>=1;
}
return re;
}
13. 定义数组时,数组大小最好比告诉的最大范围大一点。字符数组大小必须比字符串最大长度大1。
14. 习惯使用三目运算符
int max(int a,int b){return a>b?a:b;}
int gcd(int m,int n){return n?gcd(n,m%n):m;}
int abs(int a){return a<0?-a:a;}
15. 有的题数据范围小但是计算量大可以用打表法,先把结果算出来保存在数组里,要用时直接取出来。
16. 大概的计算自己程序的时间的方法:引入头文件:#include<time.h> 主函数末尾添加上一句cout<<(double)clock()/CLOCKS_PER_SEC;但是输入必需重定向,不然会计算输入数据等待时间。
17. runtimeerror 一般这种错误都是下标越界或者是未赋值的变量就直接使用这两种情况,一定要好好排查,不仔细一般找不出来。另外还有在函数内开了一个比较大的数组,使堆栈耗尽所以出错。 这个是后来加上的

在oj平台上练习的一些总结【转】的更多相关文章

  1. 学校oj平台上不去

    学校oj平台上不去,我的作业咋办啊

  2. 华为OJ平台——字符串分隔

    题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...

  3. 【Win 10应用开发】如何知道UAP在哪个平台上运行

    面向22世纪的现代化应用程序可以同时在多种设备上运行,于是有朋友会有一个疑问:有时候,我们还真的需要判断一下,UAP应用程序在哪个平台上运行.尽管大多情况下我们不必要这样做,但某些特殊情况还得考虑.比 ...

  4. 关于如何在Android、Java等非微软平台上建立高信任的SharePoint应用程序

    关于如何在非微软平台上建立高信任的SharePoint应用程序 原文 :http://blogs.msdn.com/b/kaevans/archive/2014/07/14/high-trust-sh ...

  5. JVM 平台上的各种语言的开发指南

    JVM 平台上的各种语言的开发指南 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目.尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的 ...

  6. 在Windows平台上安装Node.js及NPM模块管理

    1. 下载Node.js官方Windows版程序:http://nodejs.org/#download    从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.MSI安 ...

  7. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

  8. 华为OJ平台——矩阵乘法

    题目描述: 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 输入: 1.第一个矩阵的行数 2.第一个矩阵的列数(也是第二个矩阵的行数) 3.第二个矩阵 ...

  9. 华为OJ平台——输出最小的k个数

    输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint ...

随机推荐

  1. ETL工具主流产品

    主流ETL产品:Ascential公司的Datastage(Datastage在2005年被IBM收购).Informatica公司的Powercenter. NCR Teradata公司的ETL A ...

  2. Windows XP下安装WinCE6.0开发环境

    Windows下怎样编译WinCE6.0及开发应用程序.以下介绍(安装之前必须保证C盘有足够的空间!20g左右!主要是由于在安装程序在安装过程中要解压): 在Visual Studio 2005之前, ...

  3. the Linux Kernel: Traffic Control, Shaping and QoS

    −Table of Contents Journey to the Center of the Linux Kernel: Traffic Control, Shaping and QoS 1 Int ...

  4. 【NodeJs】用arrayObject.join('')处理粘包的错误原因

    服务器测试代码如下: var net = require('net'); var server = net.createServer(function(c){ console.log('client ...

  5. 三分钟学会缓存工具DiskLruCache

    DiskLruCache是一个十分好用的android缓存工具,我们可以从GitHub上下载其源码:https://github.com/JakeWharton/DiskLruCache DiskLr ...

  6. Android开发之使用意图调用内置应用程序

    意图可以调用活动,也常被用来调用内置应用程序,如加载web页面,拨号页面,内置地图应用等等.下面就用例子来说明该用法. 效果图如下: 实现代码如下: 上图中的启动MyBrowser是用意图来调用MyW ...

  7. Oracle 插入数据效率对比

    oracle插入数据有多种方式: 将从多个表中查出来的数据插入到临时表中 数据行数 5189597 1.传统方式:直接将数据插入到表中 insert into LLB_BASIC_USER_D_TEM ...

  8. Validation Rule和Binding Group

    WPF学习之绑定-Validation Rule和Binding Group 在上一篇文章中我们讨论了有关WPF绑定的知识点,现在我们可以很容易的将业务数据作为源绑定到WPF控件并可以通过创建不同的D ...

  9. angularJs 使用中遇到的问题小结【一:关于传参】

    我请教个问题 :我在界面传了一个参数<a ng-click="deleteOrder({{orderOrder}})" class="btn warning-btn ...

  10. c#中string.trimstart() 和string.trimend() 的用法

    trim(),trimstart(),trimend()这样写是去掉空格,trimstart(a)是去掉字符串开始包含char[] a的字符,trimend同trimstart. 例:char[] a ...