Uva-839 + Uva-699

来源:互联网 发布:当前网络安全形势 编辑:程序博客网 时间:2024/06/05 15:14

两题类似,所以放在一起了。

839
题目大意: 判断天平是否平衡。
思路:按前序遍历的顺序建树,在建树的同时可以判断是否平衡。

代码:

#include <algorithm>#include <cstdio>#include <cstring>#include <iostream>#include <queue>#include <set>using namespace std;int flag = 1;int pre(){    int a,b,c,d;    scanf("%d%d%d%d",&a,&b,&c,&d);    int lw = a,rw = c;    if(a == 0)  lw =  pre();    if(c == 0)  rw = pre();    if(lw * b != rw * d)        flag = 0;    return lw+rw;}int t;int main(){    scanf("%d",&t);    int num = 0;    while(t--)    {        flag = 1;        pre();        if(num != 0)            printf("\n");        num++;        if(flag) printf("YES\n");        else printf("NO\n");    }    return 0;}

Uva699
题目大意: 下落的树叶,根结点到左右两遍的距离都是1,计算地上的不同的堆的落叶数量。

思路:和上一题类似,这题也是前序遍历建树,而且由于距离都是1,所以在建树的时候所属的位置就已经定了。

代码

#include <cstdio>#include <iostream>#include <cstring>#include <queue>using namespace std;#define maxn 1005int ans[maxn];int build(int dis){    int a;    scanf("%d",&a);    //cout<<dis<<endl;    if(a == -1) return -1;    ans[dis] += a;    build(dis-1);    build(dis+1);}int main(){    int num = 1;   // freopen("d://in.txt","r",stdin);    for(;;)    {        int a;        memset(ans,0,sizeof(ans));        scanf("%d",&a);        if(a == -1) break;        build(500-1);        build(500+1);        ans[500] += a ;        printf("Case %d:\n",num++);        int mark = 0;        for(int i = 0; i < maxn; i++)            if(ans[i] != 0)            {                if(mark == 0 ){printf("%d",ans[i]);mark= 1;}                else    printf(" %d",ans[i]);            }        printf("\n\n");    }    return 0;}
0 0
原创粉丝点击