今天参加的是CCCC天梯赛,总结来看要用到很多精巧的函数,不是很常用的那种,但是可以缩短代码量
1.字符串匹配,c库函数 strstr(s1,s2),如果在s1中找到s2子串,则返回s1上的指针,未找到返回NULL
2.c++中max min函数可以对string类生效
string s1, s2;
s1 = max(s1, s2);
3.c++中sort可以直接生效于vector数组类似于string的字典序排序,也就是说vector可以直接比较大小
vector<int>a[maxn];
sort(a, a + n);
4.c++中reverse函数可以反转vector string等
reverse(a.begin(), a.end());
5.vector型数组定义大小(不是pushback来增加)
vector<int>a(maxn);
6.for语句
for (j = i; ; j = fa[j])
{
dep++;
if (j == 0)
break;
}
//不同
for (j = i; j != 0; j = fa[j])
{
dep++;
}
7.简单树(我都不会)
已知每一点父亲节点求每一点深度、最深深度
for (i = 0; i < n; i++)
{
int dep = 0;
for (j = i;; j = fa[j])
{
dep++;
if (fa[j] == j) //不是deep==1,不是fa[j]==0,不是j==0,使用前初始化fa为自身
break;
}
deep[i] = dep;
maxd = max(maxd, dep);
}
已知各点深度,最深深度,求最长链,满足字典序最小
vector<int>a[maxn];
for (i = 0; i < n; i++)
{
if (deep[i] == maxd)
{
for (j = i;; j = fa[j])
{
a[sum].push_back(j);
if (deep[j]==1)
break;
}
reverse(a[sum].begin(), a[sum].end());
sum++;
}
}
sort(a, a + sum);