Cod sursa(job #2495915)

Utilizator arckerDolteanu Gabriel arcker Data 19 noiembrie 2019 23:24:04
Problema A+B Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>
using namespace std;
int n,v[102][102],k,a[200];
struct NODE{
    int data,i,j;
    NODE* left;
    NODE* right;
};
NODE* nod(int data, int i, int j){
    NODE *node = new NODE();
    node->data=data;
    node->i=i;
    node->j=j;
    node->left=NULL;
    node->right=NULL;
    return node;
}
int isTwoPower(int n) {
    return ( n & (n - 1) ) == 0 ;
}
void BFS(NODE* root){
    if(root==NULL)return;
    queue<NODE*>q;
    q.push(root);
    while(!q.empty()){
        NODE* next=q.front();
        q.pop();
        printf("%d ",next->data);
        if(next->left != NULL)q.push(next->left);
        if(next->right != NULL)q.push(next->right);
    }
}
void del(NODE* node){
    if(node==NULL)return;
    del(node->left);
    del(node->right);
    delete node;
}


void add(NODE* root,int times){
    int t=times,level=1;
    queue<NODE*>q;
    q.push(root);
    while(t){
        if(times-t && isTwoPower(times-t))
            level++;
        printf("%d %d\n",times-t,level);
        NODE* next=q.front();
        q.pop();
        next->left=nod(10,next->i+level,next->j);
        next->right=nod(11,next->i,next->j+level);
        q.push(next->left);
        q.push(next->right);
        t-=2;

    }
}

int main()
{
    ifstream cin("c.in");
    cin>>n;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            cin>>v[i][j];
    cin>>k;
    for(int i=1;i<=k;++i)
        cin>>a[i];

    long long times=pow(2,k+1);
    NODE* root=nod(11,1,1);
    add(root,times);
    BFS(root);

}