• PAT L2-012. 关于堆的判断


    数组模拟堆。

    #include<map>
    #include<set>
    #include<ctime>
    #include<cmath>
    #include<queue>
    #include<string>
    #include<vector>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<functional>
    using namespace std;
    
    int a[1500],n,m,b[1500];
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            b[i]=a[i]; int now=i;
            while(1)
            {
                if(now==1) break;
                if(b[now]<b[now/2])
                {
                    swap(b[now],b[now/2]);
                    now=now/2;
                }
                else break;
            }
        }
    
        for(int i=1;i<=m;i++)
        {
            int id1; char op[100];
            scanf("%d",&id1);
            while(1)
            {
                scanf("%s",op);
    
                if(strcmp(op,"root")==0)
                {
                    if(b[1]==id1) printf("T
    ");
                    else printf("F
    ");
                    break;
                }
    
                else if(strcmp(op,"and")==0)
                {
                    int id2; scanf("%d",&id2);
                    scanf("%s",op); scanf("%s",op);
    
                    int x=-1,y=-1; for(int i=1;i<=n;i++)
                    {
                        if(b[i]==id1) x=i;
                        if(b[i]==id2) y=i;
                    }
    
                    if(x/2==y/2) printf("T
    ");
                    else printf("F
    ");
    
                    break;
                }
    
                else if(strcmp(op,"parent")==0)
                {
                    scanf("%s",op);
                    int id2; scanf("%d",&id2);
    
                    int x=-1,y=-1; for(int i=1;i<=n;i++)
                    {
                        if(b[i]==id1) x=i;
                        if(b[i]==id2) y=i;
                    }
    
                    if(y/2==x) printf("T
    ");
                    else printf("F
    ");
    
                    break;
    
                }
    
                else if(strcmp(op,"child")==0)
                {
                    scanf("%s",op);
                    int id2; scanf("%d",&id2);
    
                    int x=-1,y=-1; for(int i=1;i<=n;i++)
                    {
                        if(b[i]==id1) x=i;
                        if(b[i]==id2) y=i;
                    }
    
                    if(x/2==y) printf("T
    ");
                    else printf("F
    ");
    
                    break;
    
                }
            }
        }
    
    
        return 0;
    }
  • 相关阅读:
    1. centos7 的安装
    编写java 程序与Linux进行远程连接并运行linux下的脚本
    java 利用辗除法求两个整数的最大公约数和最小公倍数
    java 给不同成绩分等级
    java 分解质因数
    java中导入 导出
    Mysql 常用命令
    mysql 创建联合主键
    mysql注释
    mysql管理工具navicat的快捷键
  • 原文地址:https://www.cnblogs.com/zufezzt/p/6600421.html
Copyright © 2020-2023  润新知