您的位置:首页 > 其它

迫于生计之九度OJ 1033 1035

2015-09-07 17:03 183 查看
九度OJ 1033

验证3n+1问题

给你n个数,记录每个数到1过程中出现的数字,如果只出现过一次,就输出(逆序的)

思路:set 直接搞,丢进set后,set.count(a[i])==1的就丢进数组里面然后倒着输出就好。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
int a[505];
int ans[505];
int main()
{
    int n;
    while(cin>>n)
    {
        set<int> s;
        s.clear();
        if(n==0)
            return 0;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        for(int i=1;i<=n;i++)
        {
            int tmp=a[i];
            while(tmp!=1)
            {
                if(tmp&1)
                {
                    tmp=tmp*3+1;
                    tmp/=2;
                    s.insert(tmp);
                }
                else
                {
                    tmp/=2;
                    s.insert(tmp);
                }
            }
        }
        int cnt=0;
        for(int i=n;i>=1;i--)
        {
            if(s.count(a[i])==0)
            {
                ans[cnt++]=a[i];
            }
        }
        for(int i=0;i<cnt-1;i++)
        {
            cout<<ans[i]<<" ";
        }
        cout<<ans[cnt-1]<<endl;
    }
    return 0;
}


九度OJ 1035

题目1035:找出直系亲属

时间限制:1 秒
内存限制:32 兆
特殊判题:
提交:2369
解决:929

题目描述:
如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。

输入:
输入包含多组测试用例,每组用例首先包含2个整数n(0<=n<=26)和m(0<m<50), 分别表示有n个亲属关系和m个问题, 然后接下来是n行的形式如ABC的字符串,表示A的父母亲分别是B和C,如果A的父母亲信息不全,则用-代替,例如A-C,再然后是m行形式如FA的字符串,表示询问F和A的关系。

当n和m为0时结束输入。

输出:
如果询问的2个人是直系亲属,请按题目描述输出2者的关系,如果没有直系关系,请输出-。

具体含义和输出格式参见样例.

样例输入:
3 2
ABC
CDE
EFG
FA
BE
0 0


样例输出:
great-grandparent
-


思路:显然可以dfs建好树后然后求深度。然而并不会。。。

我的思路:把N个输入当做有向图的边来建图,ABC代表A->B A->C有一条权值为1的边,然后图建好后,floyd跑一遍最短路求出任意两点的距离,m个询问进来后,直接查询a->b或者b->a的权值就好,分分类输出就行了。主要是点少。。。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

int dis[105][105];

void floyd()
{
    for(int k=1;k<=100;k++)
    {
        for(int i=1;i<=100;i++)
        {
            for(int j=1;j<=100;j++)
            {
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
            }
        }
    }
}
string s;
int n,m;
int main()
{
    while(cin>>n>>m)
    {
        if(n==0&&m==0)
            return 0;
        for(int i=1;i<=100;i++)
        {
            for(int j=1;j<=100;j++)
            {
                if(i==j)
                {
                    dis[i][j]=0;
                }
                else
                {
                    dis[i][j]=9999;
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            cin>>s;
            int a,b,c;
            a=s[0];
            b=s[1];
            c=s[2];
            //cout<<a<<"~~"<<b<<"~~"<<endl;
            dis[a][b]=dis[a][c]=1;//a是b,c的儿子,代表a->b,a->c有一条有向边

        }
        floyd();
        while(m--)
        {
            string ss;
            cin>>ss;
            int a,b;
            a=ss[0];
            b=ss[1];
            int c;
            c=min(dis[a][b],dis[b][a]);//看是a->b有边还是b->a有边,选最小的
            if(c==9999||c==0)
            {
                cout<<"-"<<endl;
                continue;
            }//如果都没有边,或者就是自己本身
            if(c==1)
            {
                if(dis[b][a]==1)
                cout<<"parent"<<endl;//b->a则父母
                else
                    cout<<"child"<<endl;//否则儿子
            }
            else//如果不为1就必然是祖辈的了。
            {
                if(dis[a][b]!=9999)//a->b去扫
                {
                    c-=2;
                    for(int i=1;i<=c;i++)
                    {
                        cout<<"great-";
                    }
                    cout<<"grandchild"<<endl;
                }
                else//b->a去扫
                {
                     c-=2;
                    for(int i=1;i<=c;i++)
                    {
                        cout<<"great-";
                    }
                    cout<<"grandparent"<<endl;
                }
            }
        }
    }
    return 0;
}


DFS,指针都能要了我的命,能用别的做法做就用别的做法做吧,太纱布了QAQ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: