当前位置: 首页 > news >正文

到底爱不爱我

L2-3 到底爱不爱我

love.JPG

古代少女有了心上人时,会悄悄折一条树枝,揪那枝上的叶子,揪一片叶子念一句“爱我”,再揪一片念一句“不爱我”…… 这样揪落最后一片叶子的时候,看看是停在“爱”还是“不爱”。

但聪明的慧娘一眼洞穿,只要数一下叶子有多少片,根据这个数字的奇偶性判断是以“爱”开始还是以“不爱”开始,就总是可以最后落在“爱”上。这个游戏顿时就变得无趣了 —— 真的是文科生制造浪漫,理科生杀死浪漫。

于是有着工科生大脑的慧娘打算另外制作一个更有趣的浪漫游戏。她用不同植物的枝条做成了三种“情枝”:

  • “专情枝”:是一根有两个分岔的树枝,只有当两个分岔上连接的枝条传过来的情话都是“爱”的时候,这根枝条的根部才传出“爱”;否则树枝根部传出的是“不爱”。
  • “博爱枝”:也是一根有两个分岔的树枝,只有当两个分岔上连接的枝条传过来的情话都是“不爱”的时候,这根枝条的根部才传出“不爱”;否则树枝根部传出的都是“爱”。
  • “情变枝”:是没有分岔的一根直枝,如果一端接到“爱”,另一端必须传出“不爱”;反之如果一端接到“不爱”,另一端则会传出“爱”。

慧娘将这些树枝摆放在院子里,布了一个“情阵”,先选一根特殊的枝条作为初试一枝,从这枝条的根部开始,扩散开去,令它们根枝相连。然后她在末梢的枝杈旁随意写下“爱”或“不爱”。现在请你写个程序帮她算出来,在初始一枝的根部,她能得到“爱”还是“不爱”?

输入格式:

输入在第一行中给出正整数 N(≤30),是慧娘制作的情枝数量。这里假设她将所有的情枝从 1 到 N 做好了编号。随后 N 行,第 i 行给出第 i 枝的描述,格式为

类型 左分枝连接的编号 右分枝连接的编号

其中 类型 为 1 代表专情、2 代表博爱、3 代表情变。当然如果是情变枝,则后面跟的是其唯一末端连接的情枝编号,并没有两个分枝的信息。如果一个分枝是末梢,并没有连接其它枝条,则对应编号为 0。

接下来一行中给出正整数 K(≤30),是慧娘询问的次数。以下 K 行,每行给出一个由 01 组成的字符串,其中 0 表示“不爱”,1 表示“爱”—— 这是慧娘从左到右在每个枝杈末梢处写下的。(注意:“从左到右”的意思是,我们从初试一枝出发去遍历所有枝条的末梢时,总是遵循先遍历左边情阵、再遍历右边情阵的顺序)

输出格式:

对慧娘的每个询问,如果她在初始一枝的根部能得到“爱”,就输出 Ai;否则输出 BuAi

输入样例:

6
2 6 4
1 0 0
3 1
2 0 0
3 0
1 5 2
5
11111
00000
11100
10011
01100

输出样例:

BuAi
Ai
Ai
BuAi
BuAi

样例说明:

样例对应的情阵以及慧娘第 3 问的情势如图所示,其中完整的心对应 1,裂开的心对应 0

sample.jpg

递归 

#include "bits/stdc++.h"
using namespace std;
struct node{
	int type;
	int l;
	int r;
	node (int a = -1, int b = 0, int c = 0){
		type  = a, l = b, r = c;
	}
	
}tree[40];
int fa[40];
int dfs(int t){
	int x, y;
	if(tree[t].type == -1){
		scanf("%1d", &x);
		return x;
	}
	x = dfs(tree[t].l);	
	if(tree[t].type != 3) 
	y = dfs(tree[t].r);
	if(tree[t].type == 3) return 1 - x;
	else if(tree[t].type == 2) {
		if(x + y == 0) return 0;
		else return 1;
	}
	else {
		if(x + y == 2) return 1;
		else return 0;
	}
}

int main(){
	memset(fa, -1, sizeof(fa));
	int n;
	cin>>n;
	int a, b, ro;
	int xx;
	for(int i = 1; i <= n; i ++){
		cin>>tree[i].type;
		cin>>a;
		if(a != 0){
			tree[i].l = a;	
			fa[a] = i; 	
		}
		if(tree[i].type != 3) {
			cin>>b;
			if(b != 0){
				tree[i].r = b;
				fa[b] = i;
			}			
		}	
	}
	for(int i = 1; i <= n; i ++) if(fa[i] == -1) ro = i;
	int m;
	cin>>m;
	int x;
	while(m--){
		int ans = dfs(ro);
		if (ans == 1) cout<<"Ai"<<endl;
		else cout<<"BuAi"<<endl;
		
	}
	return 0;
}

相关文章:

  • 【数据挖掘】数据预处理——以鸢尾花数据集为例
  • 网络空间安全(41)权限维持
  • 蓝桥与力扣刷题(蓝桥 立方变自身)
  • DeepBI:重构流量逻辑,助力亚马逊广告实现高效流量增长
  • UML中的类图、时序图等常见图形的作用和基本元素
  • nginx 反向代理 ubuntu
  • c#难点2
  • 【芯片设计- RTL 数字逻辑设计入门 9.3 -- SoC 设计中的 Macro】
  • 经典笔试题 小于 n 的最大整数 贪心 回溯
  • vulnhub-Tr0ll ssh爆破、wireshark流量分析,exp、寻找flag。思维导图带你清晰拿到所以flag
  • 2025年上半年NPDP报名已开启,附报名流程!
  • 家庭 企业数据仓库:如何配置和管理 NAS 系统
  • @AuthenticationPrincipal user null
  • 当全球化成为商业常态,Shopify 如何为品牌生意铺平出海之路?
  • Windows10安装cuda10.2以及cudnn v7.6.5教程
  • Flink CDC 与 SeaTunnel CDC 简单对比
  • Blender配置渲染设置并输出动画
  • 【Linux 维测专栏 5 -- linux pstore 使用介绍】
  • 【AI论文】DeepMesh:基于强化学习的自回归艺术家网格创建
  • 3月21号
  • 白天气温超30℃的北京,晚间下起了冰雹
  • 云南大理铁路枢纽工程建设取得两大进展,预计明年建成
  • 上海护师邢红获第50届南丁格尔奖,她为何能摘得护理界最高荣誉
  • 深一度|在亚马尔的天才面前,姆巴佩戴上“帽子”又如何
  • 警方通报“网约车司机偷拍女乘客”:已被行政拘留
  • 巴基斯坦外长:印巴已同意立即停火