Inserts a sequence of given numbers into a small, initially empty top heap H []. Then judge whether a series of related propositions are true. The propositions are as follows:
- x is the root: x is the root node;
- x and y are siblings: x and y are siblings;
- x is the parent of y: x is the parent of y;
- x is a child of y: x is a child of y.
Input format:
The first line of each test consists of two positive integers n (< 1000) and M (< 20), which are the number of inserted elements and the number of propositions to be judged. The next line shows the N integers in the interval [- 100000000] to be inserted into a small, initially empty top heap. Then line M, each line gives a proposition. The topic guarantees that the node key values in the proposition all exist.
Output format:
For each proposition of input, if it is true, output T in one line, otherwise output F.
Input example:
5 4 46 23 26 24 10 24 is the root 26 and 23 are siblings 46 is the parent of 23 23 is a child of 10
Output example:
F T F T
#include <iostream> #include <algorithm> #include <string.h> #include <string> #include <math.h> using namespace std; int n,m; const int MAX_V = 1001; int heap[MAX_V],sz=0; void push(int x){ int i = sz++; while(i>0){ int p = (i-1)/2; if(heap[p]<=x) break; heap[i] = heap[p]; i = p; } heap[i] = x; } int find(int x){ for(int i=0;i<n;i++){ if(heap[i]==x) return i; } return -1; } int main(){ cin>>n>>m; for(int i=0;i<n;i++){ int a; cin>>a; push(a); } string s; int x1,x2; for(int i=0;i<m;i++){ cin>>x1; cin>>s; if(s=="and"){ cin>>x2; cin>>s; cin>>s; if((find(x1)-1)/2==(find(x2)-1)/2){ cout<<"T"<<endl; } else{ cout<<"F"<<endl; } } else{ cin>>s; if(s=="a"){ cin>>s; cin>>s; cin>>x2; if(find(x2)*2+2>=find(x1)&&find(x1)>=find(x2)*2+1){ cout<<"T"<<endl; } else{ cout<<"F"<<endl; } } else{ cin>>s; if(s=="root"){ if(find(x1)==0){ cout<<"T"<<endl; } else{ cout<<"F"<<endl; } } else{ cin>>s; cin>>x2; if(find(x1)*2+2>=find(x2)&&find(x2)>=find(x1)*2+1){ cout<<"T"<<endl; } else{ cout<<"F"<<endl; } } } } } return 0; }