最新日志

发表于:2008-8-21 15:02:07
标签:无标签

0

[转载]打造Altera QuartusII警告强帖

来自:http://www.edacn.net/html/13/85113-3875.html

在QuartusII下进行编译和仿真的时候,会出现一堆warning,有的可以忽略,有的却需要注意,虽然按F1可以了解关于该警告的帮助,但有时候帮助解释的仍然不清楚,大家群策群力,把自己知道和了解的一些关于警告的问题都说出来讨论一下,免得后来的人走弯路.
    下面是我收集整理的一些,有些是自己的经验,有些是网友的,希望能给大家一点帮助,如有不对的地方,请指正,如果觉得好,请版主给点威望吧,谢谢
1.Found clock-sensitive change during active clock edge at time <time> on register "<name>"
原因:vector source file中时钟敏感信号(如:数据,允许端,清零,同步加载等)在时钟的边缘同时变化。而时钟敏感信号是

不能在时钟边沿变化的。其后果为导致结果不正确。
措施:编辑vector source file

2.Verilog HDL assignment warning at <location>: truncated value with size <number> to match size of target (<number>
原因:在HDL设计中对目标的位数进行了设定,如:reg[4:0] a;而默认为32位,将位数裁定到合适的大小
措施:如果结果正确,无须加以修正,如果不想看到这个警告,可以改变设定的位数

3.All reachable assignments to data_out(10) assign '0', register removed by optimization
原因:经过综合器优化后,输出端口已经不起作用了

4.Following 9 pins have nothing, GND, or VCC driving datain port -- changes to this connectivity may change fitting results
原因:第9脚,空或接地或接上了电源
措施:有时候定义了输出端口,但输出端直接赋‘0’,便会被接地,赋‘1’接电源。如果你的设计中这些端口就是这样用的,那便可以不理会这些warning

5.Found pins functioning as undefined clocks and/or memory enables
原因:是你作为时钟的PIN没有约束信息。可以对相应的PIN做一下设定就行了。主要是指你的某些管脚在电路当中起到了时钟管脚的
         作用,比如flip-flop的clk管脚,而此管脚没有时钟约束,因此QuartusII把“clk”作为未定义的时钟。
措施:如果clk不是时钟,可以加“not clock”的约束;如果是,可以在clock setting当中加入;在某些对时钟要求不很高的情况下,可以忽略此警告或在这里修改:Assignments>Timing analysis settings...>Individual clocks...>...

6.Timing characteristics of device EPM570T144C5 are preliminary
原因:因为MAXII 是比較新的元件在 QuartusII 中的時序並不是正式版的,要等 Service Pack
措施:只影响 Quartus 的 Waveform

7.Warning: Clock latency analysis for PLL offsets is supported for the current device family, but is not enabled
措施:将setting中的timing Requirements&Option-->More Timing Setting-->setting-->Enable Clock Latency中的on改成OFF


8.Found clock high time violation at 14.8 ns on register "|counter|lpm_counter:count1_rtl_0|dffs[11]"
原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间
措施:在中间加个寄存器可能可以解决问题

9.warning: circuit may not operate.detected 46 non-operational paths clocked by clock clk44 with clock skew larger than data delay
原因:时钟抖动大于数据延时,当时钟很快,而if等类的层次过多就会出现这种问题,但这个问题多是在器件的最高频率中才会出现
措施:setting-->timing Requirements&Options-->Default required fmax 改小一些,如改到50MHZ

10.Design contains <number> input pin(s) that do not drive logic
原因:输入引脚没有驱动逻辑(驱动其他引脚),所有的输入引脚需要有输入逻辑
措施:如果这种情况是故意的,无须理会,如果非故意,输入逻辑驱动.

11.Warning:Found clock high time violation at 8.9ns on node 'TEST3.CLK'
原因:FF中输入的PLS的保持时间过短
措施:在FF中设置较高的时钟频率

12.Warning: Found 10 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew
原因:如果你用的 CPLD 只有一组全局时钟时,用全局时钟分频产生的另一个时钟在布线中当作信号处理,不能保证低的时钟歪斜(SKEW)。会造成在这个时钟上工作的时序电路不可靠,甚至每次布线产生的问题都不一样。
措施:如果用有两组以上全局时钟的 FPGA 芯片,可以把第二个全局时钟作为另一个时钟用,可以解决这个问题。

第5条补充如下:
5.Found pins functioning as undefined clocks and/or memory enables
......可以忽略此警告 Assignments>Timing analysis settings...>Individual clocks...>... new Clock setting-->注意在Applies to node中只用选择时钟引脚一项即可,required fmax一般比所要求频率高5%即可,无须太紧或太松。

增加第13条:
13.Critical Warning: Timing requirements were not met. See Report window for details.
原因:时序要求未满足,
措施:双击Compilation Report-->Time Analyzer-->红色部分(如clock setup:'clk'等)-->左键单击list path,查看fmax的SLACK REPORT再根据提示解决,有可能是程序的算法问题或fmax设置问题

ps:大家如果有什么难解决的warning也可以发上来讨论一下,如果有已经解决的疑难warning解决方法,也可以一起分享经验.上面的情况如有错误之处,欢迎拍砖



14.Can't achieve minimum setup and hold requirement <text> along <number> path(s). See Report window for details.
原因:时序分析发现一定数量的路径违背了最小的建立和保持时间,与时钟歪斜有关,一般是由于多时钟引起的
措施:利用Compilation Report-->Time Analyzer-->红色部分(如clock hold:'clk'等),在slack中观察是hold time为负值还是setup time 为负值,然后在:Assignment-->Assignment Editor-->To中增加时钟名(from node finder),Assignment Name中增加和多时钟有关的Multicycle 和Multicycle Hold选项,如hold time为负,可使Multicycle hold的值>multicycle,如设为2和1。

15: Can't analyze file -- file E://quartusii/*/*.v is missing
原因:试图编译一个不存在的文件,该文件可能被改名或者删除了
措施:不管他,没什么影响

16.Warning: Can't find signal in vector source file for input pin |whole|clk10m
原因:因为你的波形仿真文件( vector source file )中并没有把所有的输入信号(input pin)加进去, 对于每一个输入都需要有激励源的

17.Error: Can't name logic function scfifo0 of instance "inst" -- function has same name as current design file
原因:模块的名字和project的名字重名了
措施:把两个名字之一改一下,一般改模块的名字

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(21)
发表于:2008-7-29 12:32:25
标签:第三届,智能车,华东赛区  

1

智能车华东赛区归来后的补记日记

27号初赛
        今天27号了吧。昨天试了一天车,晚上也没写啥,然后就睡了。昨天试车的情况看,华东的光电和华北相比,差距不是一丁点儿。于是我们成了矮子中的高个儿,今天上午居然第二和第四,我们所有人连呼不可思议。ccd今年上交和上海大学分别有一辆车“阴沟里翻船”,另外分别有一辆车进行NO.1的PK。南邮的成绩很好,意料之外的好,其他也就没什么了。
        下午的情况是:大家都开始放胆向前冲,我们的名次还和上午差不多。光电也没啥突出的,就是别人用的收发分离的大功率红外光电管能成功的照射到很远(或者说很高),而且其放置与地点成一定夹角,提高前瞻。这种想法,我们其实老早就有了,但一直没有实现出来。其原因是:
    1.发射管功率不够(现在比赛规则补充规定光电管个数按接收管来算,发射管数目不限;因而可以通过增加发射管数量,使用大功率发射管来实现)结论:这个问题现在应该能够解决。
    2.接收管的接收范围过大,接收角度过大(这个问题只能通过聚焦镜来解决,但少量购买聚焦镜是不现实的,实际上其他学校我也没有看到有人使用聚焦镜的,但人家实现了架高光电管和大前瞻。)总结:其实作为前瞻的光电管数目本身不是很多,我倾向于2-3个光电管作前瞻光电管架高,最多不超过5个。这样可以减少相邻光电管间的干扰,也就是增大相邻光电管间的黑白差异,缓解接收接收区域过大的问题。当然,如果我们能够使用聚焦镜,对光电管的性能将会是非常大的提高。
    3.接收管受外界光线的干扰很大。(主要是架高带来的问题,这个问题只能算法弥补了。脉冲光发射红外线能增加光电管的发射功率,从而使得接收管接收到的自然光红外干扰相对减小。我的想法是:脉冲选通高电平时读接收管的值,此时接收到的红外含发射管的红外光和自然外界的红外光,然后脉冲选通低电平时读接收管的值,此时接收到的只有自然外界的红外光。两者相减得到无自然光干扰下的红外接收管值。我估计这种算法下,接收到的黑白区别也不是很明显,实际中如果遇到这种情况,需要通过调整接收管的电阻大小,说不定还需要运放进行放大)结论:算法的问题总是可以解决的。只要有个算法强人就行了。
        说到架高光低管,既然别人今年能做出来,明年我们也一定做出来。上下两层的光电方案前瞻距离和道路细节兼顾,很好。
        在我们学校目前低置传感器,我觉的车模调到这种状态,作为业余级别,在没有机械改进的基础上做到这点已经快到极限了。尤其是hzb的车,转角只是一个光点管检测到黑线对应一个舵机角度值,华东赛初赛第四,决赛第三,我觉的已经调到很好的状态了。再调就是改进算法和改机械部分了。
        摄像头对我们的教育意义很大。因为摄像头小车技术相对成熟,今年的赛车改进:
    1是降低摄像头高度,以降低中心,而镜头角度则相对较平以扩大视野
    2是上海大学摄像头的连杆和舵机同步连动的设计,拉动摄像头和前轮同时转向,非常棒。当然了,他们的算法也就相应复杂。虽然这辆车在决赛中比赛失败,失败原因是他们的出发点手动引导设计有问题。但我们在前一天试车,第一天预赛和后来的表演赛中可以看到他们的小车明显快于上交第一的小车。
    3是见识了人家的高速过弯,上交也看不清人家高速是咋回事,一下就过去了,好像是正常驶过去的(可能我这里的表达有点问题,见谅)。上海大学是明显飘过去的,可人家漂移控制的非常好,重心也低,不会翻车或者“跳舞”或者甩尾过度。丫的佩服。恩,至少看到了我们的改进空间。
 

        28号决赛的情况也简单说一下。今天选手们都很紧张。wj的右拐一直不理想,这次成了他们的死穴,差点比赛失败,我个人认为是机械结构的问题(也有人说是算法问题)。来合肥之前,我们就知道这个问题的存在,但一直无法解决。小kan紧张到不行,冲到主席台旁边一动不动死死盯着小车,和他赛完后舒心的微笑形成鲜明对比,见识了yp的临危不乱,让人佩服,这家伙日后潜力不得了。
        上海大学以机械结构和对赛车的熟悉取胜,上交以算法取胜,这是不争的事实。光电的乐乐赢就赢在他们架高了光电,而且用的不错,突破了这个难题,我们的算法相信不比他们差。
        由于flew来看我,表演赛和最后车模都没有视频或者照片的记录,很可惜,最想看到的是上大SUL和南邮乐乐的小车近照。

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 原创

评论(5) | 阅读(267)
发表于:2008-7-24 17:00:02
标签:无标签

1

飞思卡尔加速度传感器MMA7260

    感器是飞思卡尔申请样片时顺带申请的。淘宝上四五十块钱一片,说不上贵还是便宜;还行吧,作为学生,不用自己花钱,感觉还行。

    测量范围是正1.5g~6g1g=9.8m/s。一般智能车上加速度的极限情况,需要10cm内从4m/s减到1m/s,根据公式v2*v2-v1*v1=2*a*s,加速度a=37.5m/s2=3g,符合应用要求。加速度传感器上有四个测量范围的档位选择。如下图:

点击开大图

在正常(非睡眠)情况下,3.3V供电,输出xyz的模拟电压。加速度传感器的测量原理本质是两片弹性间距的平板电容,改变间距即改变电容,因而改变输出电压。加速度与电容平板上的电荷变化有关;或者说,加速度与输出电压的变化情况有关,而与输出电压的出示位置状态无关(与平板电容的初始电容量无关)。所以加速度的测量一定要用实时的输出电压与传感器位置固定后初始输出电压相减,才能得到正确的最终结果。由上也可以看出,加速度传感器的位置固定是要求很严格的。一旦三维位置发生变化,其整个初始加速度值都要发生变化,这样测量加速度的结果肯定不会正确。目前我还没有想到解决传感器位置晃动影响结果的办法。掌握这个最重要(我认为)的诀窍之后,其他问题基本都不是问题。

点击开大图

另外,噪声对传感器的影响很大。MMA7260的输出引脚还需要有一个RC低通滤波,具体参数见datasheet推荐。

 

我的pcb如下图所示:

 

 

点击此处查看原文 >>

系统分类: 汽车电子   |    用户分类:    |    来源: 原创

评论(1) | 阅读(336)
发表于:2008-7-24 15:38:28
标签:无标签

1

小懒虫……

    小懒虫的暑假生活有点迷糊~

    智能车帮忙看看场子,明天就去合肥比赛了。丫的不得不承认,wj和cyl两个人就是强;如果没有他们4天前的加入,我们学校这次ccd肯定要砸锅。光电就那样,马马虎虎,应该能进决赛,但最后成绩可以想象不会好。

    想做飞思卡尔的开源bdm的。之前已经写过一篇入门级别的文章了。不过当时自以为很清晰的东西,现在发现什么都不是,当初自以为是的像个白痴。现在反而不敢说自己已经弄清楚他BDM了。毕竟单片机到现在都无法下载,解决了一个232的问题,但还是搞不定,至今还不知道无法下载的原因。可见自己有多糟糕了。

    唯一值得安慰的是调了个加速度传感器。还不全是我做的。

    到现在为止,暑假的生活也就是上上网,看看资料。明天去合肥了,祝我们大家都好运!

    接下来会写两个东西:1是关于飞思卡尔的三维的加速度传感器MMA7260,2是关于BDM的,不管调没调出来,最后都想要写点东西,总结一下。

    好了,小懒虫就此打住。

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类:    |    来源: 原创

评论(0) | 阅读(107)
发表于:2008-7-3 23:30:01
标签:无标签

0

C++头文件一览表

//from http://www.56life.cn/read.php?33

C、传统 C++


#include <assert.h>    //设定插入点
#include <ctype.h>     //字符处理
#include <errno.h>     //定义错误码
#include <float.h>     //浮点数处理
#include <fstream.h>    //文件输入/输出
#include <iomanip.h>    //参数化输入/输出
#include <iostream.h>   //数据流输入/输出
#include <limits.h>    //定义各种数据类型最值常量
#include <locale.h>    //定义本地化函数
#include <math.h>     //定义数学函数
#include <stdio.h>     //定义输入/输出函数
#include <stdlib.h>    //定义杂项函数及内存分配函数
#include <string.h>    //字符串处理
#include <strstrea.h>   //基于数组的输入/输出
#include <time.h>     //定义关于时间的函数
#include <wchar.h>     //宽字符处理及输入/输出
#include <wctype.h>    //宽字符分类

//////////////////////////////////////////////////////////////////////////

标准 C++ (同上的不再注释)


#include <algorithm>    //STL 通用算法
#include <bitset>     //STL 位集容器
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex>     //复数类
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>      //STL 双端队列容器
#include <exception>    //异常处理类
#include <fstream>
#include <functional>   //STL 定义运算函数(代替运算符)
#include <limits>
#include <list>      //STL 线性列表容器
#include <map>       //STL 映射容器
#include <iomanip>
#include <ios>       //基本输入/输出支持
#include <iosfwd>     //输入/输出系统使用的前置声明
#include <iostream>
#include <istream>     //基本输入流
#include <ostream>     //基本输出流
#include <queue>      //STL 队列容器
#include <set>       //STL 集合容器
#include <sstream>     //基于字符串的流
#include <stack>      //STL 堆栈容器    
#include <stdexcept>    //标准异常类
#include <streambuf>    //底层输入/输出支持
#include <string>     //字符串类
#include <utility>     //STL 通用模板类
#include <vector>     //STL 动态数组容器
#include <cwchar>
#include <cwctype>

using namespace std;

//////////////////////////////////////////////////////////////////////////

C99 增加


#include <complex.h>   //复数处理
#include <fenv.h>    //浮点环境
#include <inttypes.h>  //整数格式转换
#include <stdbool.h>   //布尔环境
#include <stdint.h>   //整型环境
#include <tgmath.h>   //通用类型数学宏

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(235)
发表于:2008-7-3 23:28:24
标签:无标签

0

dxp快捷键大全

原来觉得DXP没有多少快捷键,搜一下才豁然开朗,我靠,不少:

ctrl+del——删除选取的元件(2个或2个以上)
x——将浮动图件左右翻转
y——将浮动图件上下翻转
alt+backspace——恢复前一次的操作
ctrl+backspace——取消前一次的恢复
crtl+g——跳转到指定的位置
crtl+f——寻找指定的文字
v+d——缩放视图,以显示整张电路图
v+f——缩放视图,以显示所有电路部件
backspace——放置导线或多边形时,删除最末一个顶点
delete——放置导线或多边形时,删除最末一个顶点
ctrl+tab——在打开的各个设计文件文档之间切换
a——弹出edit\align子菜单
b——弹出view\toolbars子菜单
j——弹出edit\jump菜单
l——弹出edit\set location makers子菜单
m——弹出edit\move子菜单
s——弹出edit\select子菜单
x——弹出edit\deselect菜单
左箭头——光标左移1个电气栅格
shift+左箭头——光标左移10个电气栅格
右箭头——光标右移1个电气栅格
shift+右箭头——光标右移10个电气栅格
上箭头——光标上移1个电气栅格
shift+上箭头——光标上移10个电气栅格
下箭头——光标下移1个电气栅格
shift+下箭头——光标下移10个电气栅格
ctrl+1——以零件原来的尺寸的大小显示图纸
ctrl+2——以零件原来的尺寸的200%显示图纸
ctrl+4——以零件原来的尺寸的400%显示图纸
ctrl+5——以零件原来的尺寸的50%显示图纸
ctrl+f——查找指定字符
ctrl+g——查找替换字符
ctrl+b——将选定对象以下边缘为基准,底部对齐
ctrl+t——将选定对象以上边缘为基准,顶部对齐
ctrl+l——将选定对象以左边缘为基准,靠左对齐
ctrl+r——将选定对象以右边缘为基准,靠右对齐
ctrl+h——将选定对象以左右边缘的中心线为基准,水平居中排列
ctrl+v——将选定对象以上下边缘的中心线为基准,垂直居中排列
ctrl+shift+h——将选定对象在左右边缘之间,水平均布
ctrl+shift+v——将选定对象在上下边缘之间,垂直均布
shift+f4——将打开的所有文档窗口平铺显示
shift+f5——将打开的所有文档窗口层叠显示
shift+单左鼠——选定单个对象
crtl+单左鼠,再释放crtl——拖动单个对象
shift+ctrl+左鼠——移动单个对象
按ctrl后移动或拖动——移动对象时,不受电器格点限制
按alt后移动或拖动——移动对象时,保持垂直方向
按shift+alt后移动或拖动——移动对象时,保持水平方向

点击此处查看原文 >>

系统分类: PCB   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(146)
发表于:2008-6-24 19:34:51
标签:无标签

1

Dual Palindromes(ps:今天所有人的博客文章都打不开,有谁遇到过这个问题?)

steve今天考我的题目,写诗写出来了,不过没法提交oj验证。

原题如下:

Dual Palindromes
Mario Cruz (Colombia) & Hugo Rickeboer (Argentina)
A number that reads the same from right to left as when read from left to right is called a palindrome. The number 12321 is a palindrome; the number 77778 is not. Of course, palindromes have neither leading nor trailing zeroes, so 0220 is not a palindrome.

The number 21 (base 10) is not palindrome in base 10, but the number 21 (base 10) is, in fact, a palindrome in base 2 (10101).

Write a program that reads two numbers (expressed in base 10):

N (1 <= N <= 15)
S (0 < S < 10000)
and then finds and prints (in base 10) the first N numbers strictly greater than S that are palindromic when written in two or more number bases (2 <= base <= 10).
Solutions to this problem do not require manipulating integers larger than the standard 32 bits.

PROGRAM NAME: dualpal
INPUT FORMAT
A single line with space separated integers N and S.

SAMPLE INPUT (file dualpal.in)
3 25

OUTPUT FORMAT
N lines, each with a base 10 number that is palindromic when expressed in at least two of the bases 2..10. The numbers should be listed in order from smallest to largest.
SAMPLE OUTPUT (file dualpal.out)
26
27
28


我的输入输出格式直接就不管了。自己的代码如下:

#include<iostream>
using namespace std;
void get_jinzhi(unsigned int num,unsigned int base,int *array,int& point)
{
 unsigned int shang;
 point=0;
 while(base<=num)
 {
  shang=num/base;
  array[point]=num % base;
  num=shang;
  ++point;
 }
 array[point]=num;
}
bool decide(int* jinzhi,int point)
{
 bool flag="true";
 int j="0";
 while(j<=point/2)
 {
  if (jinzhi[j]==jinzhi[point-j])
   j++;
  else
  {
   flag=false;
   return flag;
  }
 }
 return flag;
}
int main(void)
{
 int jinzhi[21]={0};
 int point="0";
 unsigned int S="0",N=0;
 unsigned int rt_tms,number,base;

 cin>>N>>S;
 rt_tms=0;
 number=S;
 while (rt_tms<N)
 {
  ++number;
  for (base=2;base<=10;++base)
  {
   get_jinzhi(number,base,jinzhi,point);
   if (decide(jinzhi,point))
   {
    cout<<number<<endl;
    ++rt_tms;
    break;
   }
  }
 }
 return 0;
}

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 整理

评论(0) | 阅读(156)
发表于:2008-6-15 20:43:26
标签:无标签

1

【hdu 2160】母猪的故事

http://acm.hdu.edu.cn/showproblem.php?pid=2160

其实就是裴波那契数列

#include"math.h"
using namespace std;
void main()
{
 //
 int n;
 int i="0";
 int db[20];//={1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1579,2584,4181,6765,10946};
 
 db[0]=1;
 db[1]=2;
 db[2]=3;
 for(int j="3";j<20;j++)
 {
  db[j]=2*db[j-1]-db[j-3];
  cout<<db[j]<<" ";
 }
 int t;
 cin>>n;
// int *t=new int[n];
 int *r=new int[n];
 while(i<n)
 {
  cin>>t;
  r[i]=db[t-1];
  i++;
 }
 for(i=0;i<n;i++)
  cout<<r[i]<<endl;
}

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 整理

评论(0) | 阅读(208)
发表于:2008-6-14 15:30:42
标签:无标签

1

算法训练计划

(steve GG给的算法训练计划,其中的注释是他自己的,对我来说,一切都是零)

-----------------------------------------------------
本文来自:大学生技术交流!! 转载请注明出自【Scizone.cn】 作者:CrackSteVe 您是第92个浏览者
-----------------------------------------------------

下面给个计划你练练:

一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。


第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码, 因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来.


1.最短路(Floyd、Dijstra(会),BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写) //prime会
3.大数(高精度)加减乘除 //大数除大数不太会
4.二分查找. (代码可在五行以内) //OK
5.叉乘、判线段相交、然后写个凸包.
6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简) //知道一点点
7.数学上的有:辗转相除(两行内)//会,线段交点、多角形面积公式. //会,不太熟练
8. 调用系统的qsort, 技巧很多,慢慢掌握. //会一点点,还是STL里的sort比较好用
9. 任意进制间的转换 //熟练


第二阶段:练习复杂一点,但也较常用的算法。


如:
1. 二分图匹配(匈牙利),最小路径覆盖
2. 网络流,最小费用流。
3. 线段树.
4. 并查集。
5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp //还好
6.博弈类算法。博弈树,二进制法等。
7.最大团,最大独立集。
8.判断点在多边形内。
9. 差分约束系统.
10. 双向广度搜索、A*算法,最小耗散优先.

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(230)
发表于:2008-6-14 11:20:34
标签:无标签

2

今天的baidu复赛题(争取3年之内看懂,汗……)

1. 验证码识别 (100分)
问题背景
Baidu的论坛抓取机器人小A,最近的抓取表现越来越差了。工程师小明发现原来是很多论坛需要注册才能浏览,而且在注册的时候需要填验证码。如图所示


于是小明准备升级小A机器人,让它能够自动识别验证码。
你能帮助小明设计识别验证码的程序吗?
为了控制开发难度,这个版本只需要识别 !@#¥%&*-+ 九个符号即可。
我们已经为你将图片拆分成 100*100个点的位图,每个位图只包含一个符号,如下图所示的符号&。


同时为了让这个过程更有趣一点,我们将程序设计成交互式的,即你的程序向测试程序提问,通过测试程序的回答收集信息,当信息足够的时侯输出解答即可。

例如:(注意 “_”代表下划线,而不是空格 )
提问: 你的程序向stdout 输出字符串 Q_1_3\n ,代表查询坐标(1,3)点的黑白信息;
回答: 测试程序向你的程序的stdin写入 P_1_3_0\n ,代表(1,3)点的颜色为白,同理,如果你的程序读到 P_1_3_1\n,代表(1,3)点的颜色为黑;
1 和 2 步骤不断循环,经过若干次交互,你的程序已经找到了答案,则可以输出结果:你的程序向stdout输出 R_&\n,测试程序就会记录识别结果和询问次数并退出测试。
测试程序
我们准备了一个帮助你测试的客户端程序,点击下载 Test.zip,需要的jre版本是 1.6.0_05。

注意
识别单个图片,询问次数超过2500次则不得分,识别正确,且询问次数分数不高于500次得全分,高于500次后分数线性递减;
识别单个图片,交互总时间超过15s则不得分;
识别结果正确得30%的分数,识别结果错误不得任何分数;
所有测试图形都由同一个出题人书写,字体方向正放向上;
尺度不小于50像素,即主体符号无噪声包围盒的长宽不同时小于50像素;
图片随机噪声点比例不高于15%,图片上的黑白点都有可能随机翻转,而在添加噪声的过程中我们已经保证主体符号的含义是确定的;
Test.zip 中的测试数据是无噪声的,与评测数据不同,请特别注意。

 

2.度度熊吃西瓜

和其它熊不同,度度熊最喜欢吃的东西是西瓜,但是西瓜有一个很让它讨厌的地方--有很多的籽儿。可怜的度度熊并不知道这个世界上原来还有无籽西瓜这个东西。度度熊是一只很懒很懒的熊,并且它以Larry Wall的名言作为自勉--懒是一种美德。它吃西瓜从不吐籽儿--因为太麻烦了。当然,这种美德是有代价的,度度熊经常因为吃西瓜籽闹肚子。

有一天,这只懒熊突发奇想--如果能用一刀把那些籽儿全部切掉该多爽啊(当然,秉承懒的美德,切两刀是很辛苦的)。度度熊有一个很奇怪的仪器,可以检测出西瓜籽儿的坐标位置。于是度度熊立马动起手来(对于这种事,它一点都不懒)。但是它很快就发现,如果刻意追求切出的西瓜块儿不带籽儿,那它能吃到的西瓜就只有很少的一点了,这真是一件很扫兴的事。于是,它就只好作了个让步,只要切剩下的西瓜部分包含的籽儿的个数不大于给定的值m就可以接受,这个m究竟是多少要取决于度度熊的心情和食欲。

可是度度熊的几何学得太差了,面对那些坐标它不知该用哪个公式去算,它只好求助于你--聪明的程序员了。

度度熊吃的西瓜的形状比较特殊,它看起来像这样子:

这看起来像个扁平的扇形,为了减轻你的负担,你可以将这个问题近似成一个平面的问题。西瓜是一个圆面的一部分,并且面积严格小于整个圆面的一半,最上面的顶点就是圆心。

给出西瓜的形状和籽儿的坐标,你的任务是求一个最佳的切割位置(刀面是直的),使得切出来的一块西瓜包含的籽儿不大于给定的数m,含不含有西瓜皮都没有关系-度度熊不讨厌吃西瓜皮。在这样的条件下当然是要求切出来的部分尽可能大了(度度熊现在很饿)。由于已简化为平面问题,所以你的任务是输出吃到的部分的面积。
注意:你可以忽略西瓜皮和西瓜籽的大小。

所有的坐标以极坐标格式输入。具体的格式是 (ρ,θ),分别表示(极径,极角),极角以角度为单位,圆心在极点。
其中 0<ρ, 0≤θ<360

名词解释
极坐标
在平面内取一个定点O, 叫极点,引一条射线Ox,叫做极轴,再选定一个长度单位和角度的正方向(本题取逆时针方向)。对于平面内任何一点M,用ρ表示线段OM的长度,θ表示从Ox到OM 的角度,ρ叫做点M的极径,θ叫做点M的极角,有序数对 (ρ,θ)就叫点M的极坐标,这样建立的坐标系叫做极坐标系。

输入格式
第一行一个正整数T,说明共T组数据,T ≤ 10。
第二行一个正整数r,说明西瓜的半径是r,r ≤ 106。
第三行一个非负整数m,说明度度熊能够忍受的西瓜籽的个数为m, m ≤ 1000。
第四行两个非负整数 a, b,分别是西瓜皮的两个端点的极角,0 ≤ a < b < 360, 0 < b - a < 180。
第五行一个非负整数n,表示西瓜里头有n个籽儿,n ≤ 1000。
接下来的n行表示n个籽儿的坐标。每行两个整数表示(极径,极角),籽儿保证在西瓜内,但可能在边界上。

输出格式
对每一组数据,输出单独一行,表示度度熊能切出来"包含不大于m个籽儿的西瓜片"的最大面积(四舍五入到小数点后5位)。

样例输入
2
10
1
0 90
2
1 45
7 45
10
0
0 90
2
1 45
7 45

样例输出
77.53982
39.26991

 

3.黑白树 (100分)
问题背景
 在图论中,包含n个结点(结点编号为1~n)、n-1条边的无向连通图被称为树。
在树中,任意一对结点间的简单路径总是惟一的。
你拥有一棵白色的树--所有节点都是白色的。接下来,你需要处理c条指令:


修改指令(0 v):改变一个给定结点的颜色(白变黑,黑变白);
查询指令(1 v):询问从结点1到一个给定结点所经过的第一个黑色结点编号(假设沿着简单路径走)。
注意,在查询指令中,必须从结点1而不是结点v出发。如果结点1本身就是黑色,查询指令应该返回1。

输入说明
第一行包含两个正整数n, c,即结点数和指令条数。
以下n-1行,每行两个正整数(ui, vi) (1 <= ui < vi <= n),表示结点ui到vi之间有一条无向边。
以下c行,每行两个整数(c, v)。当c=0时表示修改指令,其中v代表被修改的结点编号;c=1时表示查询指令。
你的程序需要输出结点1到结点v之间路径的第一个黑色结点编号。
在第一条指令执行前,所有结点都是白色的。

输出格式
对于每个查询操作(c=1的操作),输出一行,包含一个整数,即第一个黑色结点的编号。如果不存在黑色结点,输出-1。

样例输入
9 8
1 2
1 3
2 4
2 9
5 9
7 9
8 9
6 8
1 3
0 8
1 6
1 7
0 2
1 9
0 2
1 9

样例输出
-1
8
-1
2
-1

评分说明
共有30个数据,分为3组,按组计分。这三组的满分分别为20, 30, 50分。
第一组: n="5000", m="4000000"
第二组: n="100000", m="3000000"
第三组: n="1000000", m="1000000"
每组数据中只要有一个数据运行超过5秒或者答案错,该组计0分。
否则,该组数据的得分取决于其中运行时间最长的数据的运行时间:运行时间越短,得分越高。

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 整理

评论(0) | 阅读(213)
234下一页总共 , 当前 /