在上次div.2的比赛中有幸做出来两道题,这对于前几场比赛中出题数为0的情况下,也算是一个突破吧,这次比赛是在下午五点进行的,头脑还算清晰,当出现的时候的Accept的时候心里的也长出了一缕阳光与希望,我还能继续下去,继续打比赛。
昨天晚上依旧是补了几道以前比赛的题,比较尴尬的是A题一道特别水的题我竟然把变量int了到后来数据长度变大的时候造成了溢出,开始只是用普通是数据验证是正确的,结果就Error了。B题是道数学题,按理来说把公式推出来就应该不难,但是,我做出来本地AC之后一提交就WA,明明样例都过了,一交就WA,还WA在第二组样例。改了好几遍才改出来,好像是因为有些条件判断的不太准确。具体我也不知道错哪了,样例本地过了,输出的数值也对,但还是WA在样例上。
C题读了一个多小时没读懂,后来才知道是一个邻接矩阵问题。
今天主要是看了字符串和Tire。
字符串主要是有KMP算法和字符穿的最小表示法。KMP算法主要用于判定字串,通过自我匹配的预处理,降低与字符串遍历匹配的时间复杂度。最小表示法是从字符串末尾取字符放到字符串最前面,的最小情况。使用新串和老串比较,在前面都相同的情况下,选择第k位最小的进行比较,跳转到k的位置继续比较。
最小表示法:
1.初始化i=1,j=2;
2.比较两个以i和j为首的字符串
若扫描了n个全部相等,则只有一种字符组成,任选都为最小;
若在第i+k和j+k位置不相等:
若ss[i+k]>ss[j+k],则令i=i+k+1。若此时i=j,再令i=i+1;
若ss[i+k]<ss[j+k],则令j=j+k+1。若此时i=j,再令j=j+1。
Tire是字典树,用于实现字符串的快速检索。
模板
int tire[SIZE][26],tot=1;//初始化,假设字符串由小写字符串组成
void insert(char* str)
{
//插入一个字符串
int len=strlen(str),p=1;
for(int k=0; k<len; k++)
{
int ch=str[k]-'a';
if(tire[p][ch]==0)
tire[p][ch]=++tot;
p=tire[p][ch];
}
endd[p]=true;
}
bool searchh(char* str)
{
int len=strlen(str),p=1;
for(int k=0; k<len; k++)
{
p=tire[p][str[k]-'a'];
if(p==0)
return false;
}
return endd[p];
}
以后希望自己能够保持热情!