[Incompleted]
CCF NOI1097 试题,本人的源码:
Ubuntu Pastebinpaste.ubuntu.comUbuntu Pastebin
Ubuntu Pastebin: SourceCodebyJulianDroidpaste.ubuntu.com满分代码:
https://blog.csdn.net/tigerisland45/article/details/71038551blog.csdn.net在NOI官方OJ上,本人代码只得了50分(未优化,但是最后是WA)
而满分代码其实和本人的逻辑差不(hen)多。。。
本人枚举了1<n<300作为输入并将输出作为比较,发现从n=229开始出现分歧,本人的输出比标准输出少了第一位..
本人的输出:
标准输出:
可以发现,第二行开头的2没了。。
通过各种debug后发现在最后一次循环(n=228)时,Line 50后fin[]和q[]的值不一样。
而q[]中的正好是正确答案。
也就是说,memcpy少/错复制了一个item。
但是在其它例子中并没有发现异常。
此代码没有输出(已清空缓冲区)。
本人将最后两次memcpy之前的数据print出来(倒输出):
第一行为输入,第二~三行为pre[],第三~四行为fin[]。
看着似乎没有任何毛病。
n<229的数据都是正常的。
究其原因,memcpy是关键(废话)。
[寻找BUG]
Cygwin通过ldd查看gcc生成的exe所需要的库:
(include目录下是没有源码的)
前三个一看就知道是底层相关,直接pass
最后memcpy函数就在msvcrt.dll中。
将mscvrt.dll dump出来后用IDA读取,找到memcpy函数:
[未完待续]
【面试题】实现memcpy函数 - 恋恋美食的个人空间 - OSCHINAmy.oschina.net