迫于生计之九度OJ 1033 1035

来源:互联网 发布:sqlserver数据库备份 编辑:程序博客网 时间:2024/05/10 00:30

九度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 2ABCCDEEFGFABE0 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

0 0
原创粉丝点击