首页 > 代码库 > PAT L2-012. 关于堆的判断

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\n");                else printf("F\n");                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\n");                else printf("F\n");                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\n");                else printf("F\n");                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\n");                else printf("F\n");                break;            }        }    }    return 0;}

 

PAT L2-012. 关于堆的判断