2009ACM多校联合暑期集训(10)——NIT专场

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

 

2894 DeBruijin —— 赛后ac.

    深搜。在比赛时花了大量时间做,但一直是在规律,但事实证明其实没规律的,唉,其实比赛是想到了用深搜去做,但由于对深搜理解不够透彻,把情况想的很复杂,就没动手做。深搜是从起点起,一直往下搜,遇到不符合的就按原路径返回,并把该路径上改过的数据还原,回到前一个节点选择另一条路往下搜,知道搜到为止,搜索顺序不同第一次收得的符合条件的路径也不同。像这题是二进制,只要先0后1,搜到的一定是最小数,比赛时就是这个没想通。

 

2895 Edit distance——ac.

     其实这题很简单,但题目一开始没描述清楚,后来改了后就1Y了。

 

 

2986 病毒侵袭——赛后ac.

     字典树其实已经学过,但感觉自己灵活运用还不行,写的话估计也比较难ac,所以在比赛时没敢写。这题字典树还用到了递归,感觉很巧妙。找一组str1 是否在str2中出现,把那组str1 构造成一棵字典树,然后把str2 放进去找,贴下部分代码:

void Find(char *str,int s,int len,ALTree *root)
{

    ALTree *temp;
    temp=root;

    int
i;
    for
(i=s;i<len;i++)
    {

        if
(temp->ID>0)
        {

            ans[anslen++]=temp->ID;

            if
(anslen==3)//这道题特有条件

                return
;
            Find(str,s+1,len,root);
//从第一个字母比起,成立往下走,不成立,从第二个字母开始
            return
;
        }
 
        if
(temp->tree[str[i]-'!']==0
)
        {

            Find(str,s+1,len,root);
  
            return
;
        }

        else

            temp=temp->tree[str[i]-'!'];
    }

    if
(temp&&temp->ID>0)
    {

        ans[anslen++]=temp->ID;

        if
(anslen==3)
            return
;
    }

    return
;
}

 

2897 邂逅明下——ac.

   简单的博弈题。不多讲。

你可能感兴趣的:(2009ACM多校联合暑期集训(10)——NIT专场)