acm的做题技巧
1.一般用C语言节约空间,要用C++库函数或STL时才用C++;
cout、cin和printf、scanf最好不要混用。
大数据输入输出时最好不要用cin、cout,防止超时。
(或加上
1 ios::sync_with_stdio(false);
2.有时候int型不够用,可以用long long或__int64型(两个下划线__)。
值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。
1 printf("%I64d",a); //__int64 一般VC编译器使用
2 printf("%lld",a); //long long 一般g++编译器使用
3.OJ判断是只看输出结果的。
所以大部分题处理一组数据后可以直接输出,就不需要用数组保存每一个Case的数据。
while(case--)
{scanf(...);
......
printf(...);
}
4.纯字符串用puts()输出。
数据大时最好用scanf()、printf()减少时间。
先用scanf(),再用gets()会读入回车。所以在中间加一个getchar();
scanf("%c%c",&c1,&c2)会读入空格;建议用%s读取字符串,取第一个字符。
5.
读到文件的结尾,程序自动结束
while( ( scanf(“%d”,&a) ) != -1 )
while( ( scanf(“%d”,&a) ) != EOF)
while( ( scanf(“%d”,&a) ) == 1 )
while( ~( scanf(“%d”,&a) ) )
读到一个0时,程序结束
while( scanf(“%d”,&a) ,a)
读到多个0时,程序结束
while( scanf(“%d%d%d”,&a,&b,&c),a+b+c ) //a,b,c非负
while( scanf(“%d%d%d”,&a,&b,&c),a|b|c )
6.数组定义int a[10]={0};可以对其全部元素赋值为0;
数组太大不要这样,防止CE。
全局变量,静态变量自动初始化为0;
7.有很多数学题是有规律的,直接推公式或用递归、循环。
8.圆周率=acos(-1.0)
自然对数=exp(1.0)
9.如果要乘或除2^n,用位移运算速度快。a>>n;a<<n;
10.定义数组时,数组大小最好比告诉的最大范围大一点。
字符数组大小必须比字符串最大长度大1。
处理字符数组时不要忘了在最后加'/0'或者0。
11.擅用三目运算符
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;
}
12.将乘法转换成加法减少时间
log(a*b)=log(a)+log(b)
将乘法转换成除法防止溢出
a/(b*c)=a/b/c
13.排序要求不高时可以用C++的STL模板函数sort(),stable_sort()
int a[n]={...};
sort(a,a+n);
bool cmp(int m,int n)
{return m>n;
}
sort(a,a+n,cmp);
14.有的题数据范围小但是计算量大可以用打表法
先把结果算出来保存在数组里,要用时直接取出来。
15.浮点数比较时最好控制精度
#define eps 1e-6
fabs(a-b)<eps
16.有些字符串与整型的转换函数是非标准的
可以使用sscanf()和sprintf()代替
sscanf(s,"%d",&n);//从字符串s中读入整数n
sprintf(s,"%d",n);//将n转换为字符串s
17.函数调用耗时较大时,可以将函数内联
inline double fun(double mid,double y)
{
double a=6.0*pow(mid,3.0)+5*mid*mid+7*mid+9-y;
return a;
}
18.需要将数组赋值为0,-1,无穷大时,可以用memset函数
const int inf=0x3f3f3f;
int nu[Max];
memset(nu,inf,sizeof(nu));
//fill函数可以赋任意值,但较慢
C++如何保留2位小数输出
cout<<setiosflags(ios::fixed)<<setprecision(2);//需要头文件#include <iomanip>
然后再输出实数类型变量即可以保留2位小数输出了,当然你要保留三位小数,setprecision(3)就行。
setprecision是指设置输出精度,当没有
cout<<setiosflags(ios::fixed)
时,输出格式是数据的有效位数,例如
float a = 123.666;
cout<<setprecision(5)<<a;
将输出123.67(注意这里,它会四舍五入)。如果setprecision里的参数小于整数位数,将以指数形式输出,例如
float a = 123.666;
cout<<setprecision(2)<<a;
将输出1.2e+002。
setiosflags(ios::fixed)是指以固定的浮点显示,当setiosflags(ios::fixed)和serprecision(n)两个一起用时就表示保留n位小数输出。这里还要注意,每次输出只要设置一次就行了,因为这两个的作用范围是后续对象,而不是仅对后一个对象起作用。
acm的做题技巧的更多相关文章
- 从【BZOJ4173】谈做题技巧
题目描述 ----------------------------------------------------------------------------------------------- ...
- NOIP初赛:完善程序做题技巧
最近写的文章好像还很多的.那么今天我们来讨论NOIP初赛的题型--完善程序.完善程序相对是比较难的题目了.全卷100分,完善程序占了大概26分,占比非常大.如果和英语考试试卷做比较,相当于首字母填空( ...
- ACM 做题过程中的一些小技巧。
ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long l ...
- SAM 做题笔记(各种技巧,持续更新,SA)
SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...
- 「浙江理工大学ACM入队200题系列」问题 J: 零基础学C/C++83——宁宁的奥数路
本题是浙江理工大学ACM入队200题第八套中的J题 我们先来看一下这题的题面. 题面 题目描述 宁宁参加奥数班,他遇到的第一个问题是这样的:口口口+口口口=口口口,宁宁需要将1~9 九个数分别填进对应 ...
- [日记&做题记录]-Noip2016提高组复赛 倒数十天
写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...
- 【做题】BZOJ2342 双倍回文——马拉车&并查集
题意:有一个长度为\(n\)的字符串,求它最长的子串\(s\)满足\(s\)是长度为4的倍数的回文串,且它的前半部分和后半部分都是回文串. \(n \leq 5 \times 10^5\) 首先,显然 ...
- noip做题记录+挑战一句话题解?
因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...
- LCT做题笔记
最近几天打算认真复习LCT,毕竟以前只会板子.正好也可以学点新的用法,这里就用来写做题笔记吧.这个分类比较混乱,主要看感觉,不一定对: 维护森林的LCT 就是最普通,最一般那种的LCT啦.这类题目往往 ...
随机推荐
- 使用git同步代码
方法1.先把远程仓库clone到本地,本地修改后再push到gitee的远程仓库 1. 配置本地的git配置信息 git config -l #查看git本地配置信息 # 如果没有配置,需要配置自己的 ...
- LocalDateTime、OffsetDateTime、ZonedDateTime互转,这一篇绝对喂饱你
前言 你好,我是A哥(YourBatman). 在JSR 310日期时间体系了,一共有三个API可用于表示日期时间: LocalDateTime:本地日期时间 OffsetDateTime:带偏移量的 ...
- ElasticSearch7.2简单命令实操(postman版)
使用postman访问操作ElasticSearch数据库,数据格式均为json 目录 使用postman访问操作ElasticSearch数据库,数据格式均为json 一.集群设置 1.查看集群设置 ...
- 【pytest】(十)fixture参数化-巧用params和ids优雅的创建测试数据
我们都知道参数化. 比如我要测试一个查询接口/test/get_goods_list,这个接口可以查询到商品的信息. 在请求中,我可以根据请参数goods_status的不同传值,可以查询到对应状态的 ...
- Redis 实战 —— 07. 复制、处理故障、事务及性能优化
复制简介 P61 关系型数据库通常会使用一个主服务器 (master) 向多个从服务器 (slave) 发送更新,并使用从服务器来处理所有读请求. Redis 也采用了同样的方法实现自己的复制特性,并 ...
- 获取Java线程转储的常用方法
1. 线程转储简介 线程转储(Thread Dump)就是JVM中所有线程状态信息的一次快照. 线程转储一般使用文本格式, 可以将其保存到文本文件中, 然后人工查看和分析, 或者使用工具/API自动分 ...
- EasyExcel基本使用
EasyExcel基本使用 一.应用场景 1.数据导入:减轻录入工作量 2.数据导出:统计信息归档 3.数据传输:异构系统之间数据传输 二.简介 Java领域解析.生成Excel比较有名的框架有Apa ...
- git的使用学习笔记---合并分支
一.使用场景 不同的分支需要合并 二.操作 1.首先要创建一个分支 git checkout -b mergedemo 创建文本 vim text.txt 添加文本 git add text.txt ...
- node集群(cluster)
使用例子 为了让node应用能够在多核服务器中提高性能,node提供cluster API,用于创建多个工作进程,然后由这些工作进程并行处理请求. // master.js const cluster ...
- 极光推送的设备唯一性标识 RegistrationID
极光推送的设备唯一性标识 RegistrationID 极光推送的设备唯一性标识 RegistrationID | 极光博客 https://blog.jiguang.cn/registrationi ...