0
点赞
收藏
分享

微信扫一扫

1.19日学习总结

一葉_code 2022-01-20 阅读 51

今天已经把题目全部写完了。 就做一下题解来,当复习吧。今天做了一道题。我觉得比较有意思。题目如下。

 这题很有意思。主要是要求的是中序。 题目也告诉我们。中序是不固定的。 其实如果仔细观察题目所给的条件,你会发现这个样例其实给了你一点提示。例子给出的是三个元素。 但我们却知道这三个元素。组成的树林 深度为三。 为什么? 可以观察一下。 按前序的要求。 根的后面 是左右子树,。而在后序中,根的前面是左右子树。由此不管是前序和后序  子树的左右是不会变的。 但是在 例子中变了。这就说明他们不是左右 子树关系。 而是根 和子节点的关系。 而且他只有这一个子节点。 这个性质 也是我解决这题的关键。 我的做法就是遍历 从中找到。想bccb这种的。  找到一个。 就说明有两种可能。 也就是二的多少次方? 这就是我做这题的思路。

 #include<stdio.h>
 #include<string.h>
 #include<math.h>
 int ans;
 char str1[500],str2[500];
 int main()
 {
         scanf("%s",str1);
         scanf("%s",str2);
		 	int m=strlen(str1);
		  	int m1=strlen(str2);
         for(int i=0;i<m;i++){
          for(int j=m1-1;j>0;j--){
           if(str1[i]==str2[j]&&str1[i+1]==str2[j-1]){
            ans++;}}}
            int s;
            s=pow(2,ans);
         printf("%d",s);
         return 0;
 }

还有就是一个并查集的题目,我想说一下。

题目如下。

  这个题目因为有两组数据。所以我用了两个并查集。 分别将他们的关系进行合并。 然后再遍历找出所有与小明和小红有 共同祖宗的数据。 这样就找到了。两个公司,小明和小红的朋友。

唯一比较麻烦的一点。 就是他另一组是负的。 所以要用一点方法来处理一下。 我是将他变成正数。再加上一个n。

具体的代码就如下了。 这个题还是比较简单。 

#include<stdio.h>
 #include <algorithm>
using namespace std;
int n,m,p,q,ansm=0,ans1=0,f[1000000];
 int find(int x) 
 {
 	if(f[x]==x){
          
      
 	return x;}
 	else {
 	  f[x]=find(f[x]);
 	  return f[x];} 
     
 }
void s(int x,int y)
{
   	f[find(x)]=find(y); 
}
int main()
{
    scanf("%d%d%d%d",&n,&m,&p,&q);
    for(int i=1;i<=n+m;++i)
     f[i]=i;
    for(int i=1;i<=p;++i)
     {
         int a,b;
         scanf("%d%d",&a,&b);
          s(a,b);
     }
    for(int i=1;i<=q;++i)
     {
         int a,b;
         scanf("%d%d",&a,&b);
         a*=-1;b*=-1;
          
          s(a+n,b+n);
     }
    for(int i=1;i<=n;++i){
     if(find(i)==find(1)){
      ansm++;}}
    for(int i=n+1;i<=n+m;++i){
     if(find(i)==find(n+1)){
      ans1++;}}
    printf("%d",min(ans1,ansm));
    return 0;
}
举报

相关推荐

1.19总结

2.17日学习总结

2.14日学习总结

2.9日学习总结

1.20日学习总结

1.18日学习总结

1月23日学习总结

0 条评论