UVa712 S-Trees
9960 단어 tree
// UVa712 S-Trees
// Rujia Liu
// : , 01 , 0 , 1 。 , ( ),
// : 1, 2, 3, ... 2, 2 1。 2^n
#include<iostream>
#include<string>
using namespace std;
const int maxn = 10;
int n, v[maxn];//
string leaves;
int solve(const string& q) {
int u = 1;
for(int i = 0; i < n; i++) {
if(q[v[i]] == '0') u *= 2; else u = u*2+1;
}
return leaves[u-(1<<n)] - '0';
}
int main() {
int kase = 0;
while(cin >> n && n) {
string s;
cout << "S-Tree #" << ++kase << ":
";
for(int i = 0; i < n; i++) { cin >> s; v[i] = s[1] - '1'; }
int m;
cin >> leaves >> m;
while(m--) {
string q;
cin >> q;
cout << solve(q);
}
cout << "
";
}
return 0;
}
나의 해답:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
//0 left, 1 right
const int N=10;
char leaves[1<<N];
//
int order[N];
int n;
void solve(char* buf)
{
// ( 1 )
int j=1;
for(int i=0;i<n;i++)
{
if(buf[order[i]]=='0')
j*=2;
else
j=j*2+1;
}
printf("%c", leaves[j-(1<<n)]);
}
void getorder(char* s)
{
for(int i=0;i<n;i++)
{
order[i]=s[1+3*i]-'1';
}
}
int main()
{
//freopen("./uva712.in", "r", stdin);
char buf[N*3+1];
int cnt=0;
while(scanf("%d", &n)==1 && n)
{
printf("S-Tree #%d:
", ++cnt);
gets(buf);//read line
gets(buf);//x1 x2 ...
getorder(buf);
gets(leaves);
int m;
scanf("%d", &m); gets(buf);//read line
for(int i=0;i<m;i++)
{
gets(buf);
solve(buf);
}
printf("
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
이진 트리 가지치기이진 트리의 root가 주어지면 1을 포함하지 않는 (지정된 트리의) 모든 하위 트리가 제거된 동일한 트리를 반환합니다. 노드node의 하위 트리는 node에 node의 자손인 모든 노드를 더한 것입니다. 이 문제는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.