http://acm.hust.edu.cn/vjudge/contest/view.action?cid=121539#problem/J
My Solution
题目虽然出题不严谨, 但挺有意思的
dfs, 用前向星存储树状结构
然后根据条件遍历, 然后根据要求输出就好了
然后这个题目的数据是有问题的
The state of
objects that do not have any nested objects will be '-'.
因此叶子必然为 '-', 不可能出现 + 0 这样的数据, 但是test 7好像就是这样的数据, 虽然据说是Codeforces的题, 但确实数据是有问题的
这样导致 先判断是否为 +-再在 '-'的情况下讨论 是否为叶子 WA7
题目中那么必须 先判断是否为叶子然后判断是否为 +-, 这样对于叶子不用管它是否+-了, 因为都是2个space来代替
但事实上根据题意2中判断顺序都是正确的, 如果WA7, 说明是数据问题了,不用担心^_^
此外, 题目的样例输出的是有问题的, ⊙﹏⊙‖∣ 瞪着题目看了1个小时,看不懂,有看了半小时才明白
#include
#include
#include
using namespace std;
typedef long long LL;
char s[108];
vector num[108];
void dfs(int u, int k)
{
int d = num[u].size(), v;
for(int i = 0; i < d; i++){
v = num[u][i];
for(int j = 0; j < k; j++) printf(" ");
if(num[v].size()){
if(s[v] == '-'){printf("- object%dn", v); dfs(v, k+1);}
else printf("+ object%dn", v);
}
else printf(" object%dn", v);
/*
if(s[v] == '-'){
if(num[v].size()) {printf("- object%dn", v); dfs(v, k+1);}
else printf(" object%dn", v);
}
else if(s[v] == '+') printf("+ object%dn", v);
*/
}
}
int main()
{
#ifdef LOCAL
freopen("a.txt", "r", stdin);
//freopen("b.txt", "w", stdout);
int T = 1;
while(T--){
#endif // LOCAL
int n, k, val;
scanf("%d", &n);
for(int i = 0; i <= n; i++){
getchar();
scanf("%c", &s[i]);
scanf("%d", &k);
while(k--){
scanf("%d", &val);
num[i].push_back(val);
}
}
if(n == 0) {printf(" projectn");}
else{
if(s[0] == '-'){
printf("- projectn");
dfs(0, 1);
}
else printf("+ projectn");
}
#ifdef LOCAL
printf("n");
}
#endif // LOCAL
return 0;
}
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uestc-2016-summer-training-1-div-2-j-objects-panel-a-dfs/
共有 0 条评论