题目大意给定一个天平,根据力矩来判断是否平衡,输入的要求是第一行是例子个数,然后每行类似树的先序遍历,所有不知道哪一样是一个例子的结尾(在没建树的情况下无法分辨)。要求递归建树,在递归中不断输入。
AC代码
#include <set>
#include <queue>
#include<algorithm>
#include <iostream>
#include<string.h>
#include<map>
#include<stack>
#include<string>
#include <stdio.h>
#include<sstream>
using namespace std;
bool tag=true;
int read(){
int a,b,c,d ;
cin>>a>>b>>c>>d;
if(a==0)
a=read();
if(c==0)
c=read();
if(a*b!=c*d)
tag=false;
return a+c;
}
int main()
{
int num;
cin>>num;
string temp;
while(num--){
tag=true;
read();
//cout<<"outread"<<endl;
if(tag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
if(num)
cout<<endl;
}
return 0;
}
另一道类似的题目,输入也是类似树的先序遍历,所以输入也是在递归中。
#include <set>
#include <queue>
#include<algorithm>
#include <iostream>
#include<string.h>
#include<map>
#include<stack>
#include<string>
#include <stdio.h>
#include<sstream>
using namespace std;
map<int ,int> leaf;
void read(int p){
int a ;
cin>>a;
if(a!=-1){
leaf[p]+=a;
read(p-1);
read(p+1);
}
}
int main()
{
int num=1;
while(1){
read(0);
//cout<<"outread"<<endl;
if(leaf.empty())
break;
cout<<"Case "<<num++<<":"<<endl;
//shuchu
map<int,int>::iterator it;
it=leaf.begin();
cout<<it->second;
it++;
for(;it!=leaf.end();it++)
cout<<" "<<it->second;
cout<<endl;
cout<<endl;
leaf.clear();
}
return 0;
}