[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开始出现分歧,本人的输出比标准输出少了第一位..
本人的输出:
![ebedeea2180690f9cf74b28bd557cc87.png](https://i-blog.csdnimg.cn/blog_migrate/dadd9a3707fc85a9c18a81ef2eb236fc.png)
标准输出:
![0f648be8c722a43c3e24119e21fe96b3.png](https://i-blog.csdnimg.cn/blog_migrate/aa6db69bcafc94be7fc036b7713daf11.png)
可以发现,第二行开头的2没了。。
通过各种debug后发现在最后一次循环(n=228)时,Line 50后fin[]和q[]的值不一样。
而q[]中的正好是正确答案。
也就是说,memcpy少/错复制了一个item。
但是在其它例子中并没有发现异常。
![1afa626110ac13afe2eb2d6f1bd09914.png](https://i-blog.csdnimg.cn/blog_migrate/675fa84100f33473390a13e9b00bd00b.jpeg)
此代码没有输出(已清空缓冲区)。
本人将最后两次memcpy之前的数据print出来(倒输出):
![4dd7e658939d75ea13346cc2c7947df6.png](https://i-blog.csdnimg.cn/blog_migrate/42dc4016c685dcc3a501465f40a21494.png)
第一行为输入,第二~三行为pre[],第三~四行为fin[]。
看着似乎没有任何毛病。
n<229的数据都是正常的。
究其原因,memcpy是关键(废话)。
[寻找BUG]
Cygwin通过ldd查看gcc生成的exe所需要的库:
(include目录下是没有源码的)
![f5768f44cf3e2d57f921db3c1be75dca.png](https://i-blog.csdnimg.cn/blog_migrate/3c23ea8305dd044c213b20bf5460fafc.jpeg)
前三个一看就知道是底层相关,直接pass
最后memcpy函数就在msvcrt.dll中。
将mscvrt.dll dump出来后用IDA读取,找到memcpy函数:
![b3ef342ec523ef4b334a5fecad512137.png](https://i-blog.csdnimg.cn/blog_migrate/ffe2bd301631f30d7c4484b7f8e17d38.jpeg)
[未完待续]
【面试题】实现memcpy函数 - 恋恋美食的个人空间 - OSCHINAmy.oschina.net![3c7d4de57fdc0ed7d2fcad059b7c92a2.png](https://i-blog.csdnimg.cn/blog_migrate/de165d2f98d88db947eab3b3995d9d37.png)