4
11
2015
0

XJOI 1043 二叉树转化

//做法略暴力
#include <iostream>
using namespace std;

int n,a[101][101],l[101],r[101];

void edit(int x) //编辑结点x
{
    int last=0; //上一个x的子结点
    for (int i=1;i<=n;++i)
        if (a[x][i]) {
            if (last) { //若不是第一个结点
                a[x][i]=0;
                a[last][i]=1;
                r[last]=i;
            } //连接上一个结点与该结点,该结点作为上一个结点的右儿子
            else l[x]=i; //第一个结点作为父结点的左儿子
            last=i;
            edit(i); //递归的编辑结点i
        }
}

int main()
{
    cin>>n;
    for (int i=1;i<=n;++i) {
        int t,x; cin>>t;
        for (int j=0;j<t;++j) {
            cin>>x;
            if (x) a[i][x]=1;
        }
    }
    edit(1);
    cout<<n<<endl;
    for (int i=1;i<=n;++i)
        cout<<l[i]<<' '<<r[i]<<endl;
    return 0;
}
Category: 题解 | Tags: XJOI 数据结构 二叉树
4
11
2015
0

XJOI 1003 质因数分解

//学军OJ首杀撒花!!^_^
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    long long n;
    cin>>n;

    int x=0;
    while (n%2==0) {
        ++x;
        n/=2;
    }
    if (x==1) cout<<"2*";
    else if (x)
    {
        cout<<2<<'^'<<x;
        if (n!=1) cout<<'*';
    }
    //处理质因数为2的情况
    for (int i=3;i<=n;i+=2)//因为偶质数只有2,所以只考虑奇数
    {
        x=0;
        while (true) {
            if (n%i==0) {
                ++x;
                n/=i;
            }
            else
            {
                if (x==0) break;
                if (x==1) cout<<i;
                else
                    cout<<i<<'^'<<x;
                if (n!=1) cout<<'*';
                break;
            }
        }
    }
 
    return 0;
}
Category: 题解 | Tags: 数学 XJOI

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com