• 【PTA-训练day14】L2-026 小字辈 + L1-054 福到了


    L2-026 小字辈 - dfs建树 + 求最大深度

    PTA | 程序设计类实验辅助教学平台

    思路

    • 用vector存关系  v[父辈下标]={孩子1下标,孩子2下标……}
    • dfs建树 从树根开始建
    • dfs逐层向下 深搜每一个节点
    • 如果是叶子节点 则用res存  res[深度]={叶节点下标} 并及时更新最大深度h
    • 最后输出h  和res[h]里的所有叶子节点
    1. #include
    2. using namespace std;
    3. const int N=1e5+10;
    4. unordered_map<int,bool> st;
    5. vectorint>> res;
    6. vectorint>> v;
    7. int h;
    8. void dfs(int u,int d) //u存的是下标
    9. {
    10. st[u]=true;
    11. if(v[u].size()==0) //如果是叶子节点
    12. {
    13. h=max(h,d);
    14. res[d].push_back(u);
    15. return;
    16. }
    17. for(int i=0;isize();i++)
    18. if(!st[v[u][i]])
    19. dfs(v[u][i],d+1);
    20. }
    21. int main()
    22. {
    23. int n,root=-1;
    24. cin>>n;
    25. v.resize(n+1);
    26. res.resize(n+1);
    27. for(int i=1;i<=n;i++)
    28. {
    29. int x;
    30. cin>>x;
    31. if(~x) v[x].push_back(i);
    32. else root=i;
    33. }
    34. dfs(root,1);
    35. cout<
    36. for(int i=0;isize();i++)
    37. {
    38. if(i!=0) cout<<" ";
    39. cout<
    40. }
    41. return 0;
    42. }

     

    !L1-054 福到了 - 15

    PTA | 程序设计类实验辅助教学平台

    思路:

    • 把每一行作字符串输入 存入vector容器中
    • 把上面的行和下面的行逐一比较 如果是非对称 则标记跳出
    • 从右下角开始替换字符 
    • 最后输出
    1. #include
    2. using namespace std;
    3. vector s;
    4. vector res;
    5. int main()
    6. {
    7. char c;
    8. int n;
    9. bool f=false;
    10. cin>>c>>n;
    11. getchar();
    12. for(int i=0;i
    13. {
    14. string str;
    15. getline(cin,str);
    16. s.push_back(str);
    17. }
    18. for(int i=0;i
    19. if(s[i]!=s[n-1-i])
    20. {
    21. f=true;
    22. break;
    23. }
    24. for(int i=s.size()-1;i>=0;i--)
    25. {
    26. string ss;
    27. for(int j=s[i].size()-1;j>=0;j--)
    28. if(s[i][j]!=' ') ss+=c;
    29. else ss+=' ';
    30. res.push_back(ss);
    31. }
    32. if(f) for(auto x:res) cout<
    33. else
    34. {
    35. cout<<"bu yong dao le"<
    36. for(auto x:res) cout<
    37. }
    38. return 0;
    39. }

     

    L1-056 猜数字 - 20

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int n;
    6. cin>>n;
    7. mapint>mp;
    8. int sum=0,peo=n;
    9. while(n--)
    10. {
    11. string s;
    12. cin>>s;
    13. int t;
    14. cin>>t;
    15. mp[s]=t;
    16. sum+=t;
    17. }
    18. sum=sum/peo/2;
    19. string res;
    20. int minx=0x3f3f3f3f;
    21. for(auto x:mp)
    22. {
    23. int d=abs(x.second-sum);
    24. if(d
    25. {
    26. minx=d;
    27. res=x.first;
    28. }
    29. }
    30. cout<" "<
    31. }

    L1-055 谁是赢家 - 10

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int a,b;
    6. int pa=0,pb=0;
    7. cin>>a>>b;
    8. for(int i=0;i<3;i++)
    9. {
    10. int x;
    11. cin>>x;
    12. if(x==0) pa++;
    13. else pb++;
    14. }
    15. if(a>b&&pa>=1) printf("The winner is a: %d + %d",a,pa);
    16. else printf("The winner is b: %d + %d",b,pb);
    17. }

  • 相关阅读:
    轻量应用服务器部署vue项目
    JS Arguments的使用
    .NET Core Web APi类库如何内嵌运行?
    Mybatis的增删改查操作
    java 匿名内部类
    [附源码]java毕业设计校园一卡通管理信息系统台
    RFID技术在锂电池生产线自动化应用
    【操作系统-进程】进程的概念
    JavaScript中的闭包
    py1_Linux/Windows 的 Python 安装以及运行方式
  • 原文地址:https://blog.csdn.net/weixin_61639349/article/details/128146080