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.
简单的博弈题。不多讲。