首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
search
version
java
tags
httpclient
hashtable
string
import
triggers
cookie
char
typescript
heap
jar
include
replace
erlang
php
node.js
const
ascii
perl
format
shell
match
dagger
hook
install
header
post
rsa
subset
php5
instance
split
cmd
cPlusPlus
expression
actionscrip
join
bash
uml
input
vba
web3
flutter
python2
web
eval
int
iostream
md5
ip
hash
loops
select
cSharp
spring
lua
runtime
数组
case
bit
golang
callback
schema
frameworks
merge
php7
stream
jsp
hashset
function
keyword
dockerfile
sum
plugins
regex
dll
当前位置:
开发笔记
>
编程语言
> 正文
ACM系统中经常遇到的问题
作者:嘿可爱无罪 | 来源:互联网 | 2023-09-05 20:11
ACM系统中经常遇到的问题貌似新人们总会遇到几个问题,提一下吧。1.64Bit整型的问题2.大数组RE的问题3.cincout的TLE危险4.scanf的\n遗留问题以及get
ACM系统中经常遇到的问题
貌似新人们总会遇到几个问题,提一下吧。
1. 64Bit整型的问题
2. 大数组RE的问题
3. cin/cout的TLE危险
4. scanf的\n遗留问题以及gets的RE问题
5. 精度问题
6. 其它还有一些建议
--
1. 64Bit整型的问题
这个东西比较纠结阿。一般来说
在VC下面,定义的时候要用__int64
用g++/gcc的时候,则应该用long long定义
在Windows下面,输入输出的时候要用%I64d这个格式
在类Unix(包括Solaris/Linux等)下面,输入输出的时候要用%lld这个格式
对于各类OJ,不妨自己在A+B这道题上试试
参加比赛的时候,务必向工作人员或者judge问清楚编译环境
——包括操作系统和编译器。
2. 大数组RE的问题
emingCup的时候就有队伍遇到这个问题
自己运行的时候都RE还交过来。
这个涉及到编译器对不同类型变量的内存分配规则。
在C/C++中
对于在函数内定义的变量(包括main()函数)
都是在程序的栈空间内分配的(这个空间相对有限)
如果定义一个内存使用量达到MB级别的数组
一般就会Stack Overflow,RE了。
所以遇到大数组的时候建议大家都定义成全局变量
这样就可以在编译的时候就为它们分配好足够的空间。
更具体的可以参见luoxi同学的这篇日志。
http://hi.baidu.com/luoxi0209/blog/item/50364c39b1c2622597ddd8b0.html
另外,想起snoopy大牛的建议,如果你的算法递归稍会微深一点,那就考虑优化,或者写非递归的吧。
3. cin/cout的TLE危险
C++中cin/cout这两个预定义好的变量内部都有个缓冲区
对于实际使用是非常有好处的
但是不适合用来做acm:它们常常会导致TLE
原因大概是没有及时把它们的缓冲区输出吧。
特别要注意的是不止cin/cout
其它所有的C++流都可能有缓冲区
所以做题目的时候,特别是有大量I/O的题目
尽量使用scanf和printf (它们的格式化输出功能非常好)。
对于字符串,string确实很好用,但是只能用cin输入
必要的时候,变通的方法是
定义一个比较大的char数组,scanf到这个数组,然后再赋给string
char a[1024];
string b;
scanf("%s", a);
b = string(a);
输出的时候就:
printf("%s", b.c_str());
4. scanf的\n遗留问题以及gets的RE问题
有些题目的输入格式很BT阿
scanf默认用空白字符(包括空格,tab,回车,换行)作为分隔符
在输入完一个数据以后,接下来的空白符不会被处理
会继续留在系统的输入缓冲区(特别是\n)
所以如果这个时候要输入一个字符,很可能的就是输入的是\n
这时候可以用一个getchar()来处理这个\n。
有时候需要读入完整的一行,因为scanf的默认分隔符问题
所以有时候需要换个读入方式
而gets的RE问题是这样的
gets遇到\n或者EOF才会结束
所以可能就会导致数组越界错误
因此尽量不要使用,
推荐使用scanf("%1024[^\n]", a)
或者 fgets(a, 1024, stdin);
限制输入的字符数。
5. 精度问题
对于float/double的比较,通常可能会有舍入误差
(比如0.1这个东西在IEEE754标准下永远不可能精确存储)
导致本来应该相等的不相等,所以建议这样
先定义一个常量,比如精度在10^-9这个额度(要根据具体问题判断这个额度!)
#define EPS (1e-9)
然后用这样一个比较函数:
int cmpDouble(double a, double b){
if(fabs(a - b)
else if(a - b > 0) return 1; // a > b
else return -1; // a
}
对于float/double的取整也很有技巧:
floor和ceil不一定能给你你想要的结果(why?)
对于一个double类型的a,想想这些表达式的意义:
(提示:取(?)整,四舍五入)
(int)(a + EPS)
(int)(a + EPS + 0.5)
以上对于正数成立,对于负数呢?最好还是自己想想,嗯。
其它还有一些建议,比如
~ 定义数组的时候开大些
比如题目告诉最多5000个数据,那就开到5010或者更多一些吧
~ 不要太依赖vc的调试功能吧
比赛的时候大多是没这个条件的,学习gdb,或者用printf什么的自己动手调。
~ 学习vim吧,用熟了它你才会知道什么叫做编辑器。
~ 学习STL吧!
最起码一些简单的算法和容器得会使阿,不然你很吃亏的。那些代码都是最牛的那些人写的东西,效率绝对不会比你写的代码差——而且还省大量coding的时间。
举个例子说,对于int a[5] = {3,4,5,2,7};
sort(a, a+5);以后a就是升序了。
如果要降序,自己写一个简单的比较函数就好了。
sort用的是随机化快速排序,绝对比你随便写的qsort以及stdlib.h里面的qsort牛B(它还要一个很费解的比较函数)。同样还有使用归并的stable_sort,堆排的heap_sort(附送全套heap操作函数)。
再有,map和set以RB-tree为底层数据结构,你肯定不会怀疑它们的重要性的;priority_queue对于A*也是很有帮助的。
请永远记住这2点:
STL的区间都是左闭右开的,begin和end之间的区间就是:[begin, end)
比较函数一定要遵循严格弱序化原则: 对于相等的两个元素,不能返回true。
更详细的请参考《Effective STL》
~ 每次测试输入用复制粘贴多累阿,试试这两个语句:
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
~ BT输入
有时候出题的人他心情不爽,不告诉你有多少个数字
——反正就是塞在一行里面,你自己读去吧
这时候可以选择自己模拟scanf的方式输入整数或者字符串
但是这个代码写起来稍微有点痛苦,是吧。
试试ungetc()和strtok()函数吧。
64bit
数组
ci
get
int
gcc
windows
unix
linux
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
jar
java命令运行
Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ...
[详细]
蜡笔小新 2023-12-12 19:26:55
search
CentOS 6.4更新源地址的方法
本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ...
[详细]
蜡笔小新 2023-12-11 16:09:40
const
获取当前模块所在路径的GetModuleFileName函数用法详解
本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ...
[详细]
蜡笔小新 2023-12-14 19:29:57
jar
Skywalking系列博客1安装单机版 Skywalking的快速安装方法
本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ...
[详细]
蜡笔小新 2023-12-14 19:05:47
install
搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ...
[详细]
蜡笔小新 2023-12-14 17:03:58
install
在Windows 8上安装gvim中的插件的错误加载问题
本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ...
[详细]
蜡笔小新 2023-12-14 14:44:00
shell
Metasploit攻击渗透实践
本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ...
[详细]
蜡笔小新 2023-12-14 12:14:09
install
Linux下Perl的安装及第一个程序运行
本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ...
[详细]
蜡笔小新 2023-12-13 18:29:11
post
Webmin远程命令执行漏洞复现及防护方法
本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ...
[详细]
蜡笔小新 2023-12-13 16:14:53
install
如何在Windows环境下配置php+apache环境
本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ...
[详细]
蜡笔小新 2023-12-13 10:39:24
include
Android源码深入理解JNI技术的概述和应用
本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ...
[详细]
蜡笔小新 2023-12-13 10:00:57
php
mac php错误日志配置方法及错误级别修改
本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ...
[详细]
蜡笔小新 2023-12-12 11:59:08
replace
org.apache.solr.common.SolrDocument.setField()方法的使用及代码示例
本文整理了Java中org.apache.solr.common.SolrDocument.setField()方法的一些代码示例,展示了SolrDocum ...
[详细]
蜡笔小新 2023-12-09 06:54:05
header
ZABBIX 3.0 配置监控NGINX性能【OK】
1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ...
[详细]
蜡笔小新 2023-10-17 19:29:00
java
linux resin日志,linux resin 基本站点配置
进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ...
[详细]
蜡笔小新 2023-10-17 17:36:18
嘿可爱无罪
这个家伙很懒,什么也没留下!
Tags | 热门标签
search
version
java
tags
httpclient
hashtable
string
import
triggers
cookie
char
typescript
heap
jar
include
replace
erlang
php
node.js
const
ascii
perl
format
shell
match
dagger
hook
install
header
post
RankList | 热门文章
1
ORA-14551: 无法在查询中执行 DML 操作
2
Java对Oracle中Clob类型数据的读取和写入
3
Oracle触发器(trigger):一般用法
4
再谈Oracle 11g 远程导出数据库
5
Oracle FGA审计-mysql教程
6
使用 resource_limit 及 profile 限制用户连接-mysql教程
7
Oracle冷备和热备脚本-mysql教程
8
Oracle保证读一致性原理
9
PL/SQL中三种游标循环效率对比
10
Oracle基础教程:expdp时不能导出sys用户下的对象
11
Oracle基础教程之通过RMAN复制数据库
12
Oracle技术之RMAN 异机复制数据库
13
命令创建Oracle表空间和用户
14
Oracle 表死锁处理 ORA-00054-mysql教程
15
Oracle 11g使用deferred_segment_creation 延迟段创建特性时遇到的问题总结
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有