520-8 测测名字

题目描述:

有一个“爱情测试研究所”请你帮助写一个测恋人名字的小程序,需求如下:

  • 需要准备一本“答案之书”,书中列出若干由 4 ~ 8 个中文字组成的句子,即为测试答案。部分答案是正向的,例如“其实我在等你”;部分答案是负向的,例如“相见不如怀念”。
  • 提取句子中每个字的汉语拼音首字母,例如“其实我在等你”对应“qswzdn”,“相见不如怀念”对应“xjbrhn”。
  • 接收两位用户输入的姓名,同样提取名字中每个字的汉语拼音首字母,形成姓名缩写。例如“张丹宁”对应“zdn”,“齐少文”对应“qsw”。
  • 将两位用户的姓名缩写拼接在一起,去答案之书中寻找缩写完全一致的答案,并输出。例如“齐少文”和“张丹宁”的名字拼接起来,就可以得到“其实我在等你”。

当然答案之书的答案可能是不唯一的 —— 两个名字的先后拼接顺序就至少对应了两种可能的答案。对于同一种拼接,答案之书也可能有多个答案与之对应。则输出规则如下:

  • 在所有对应的答案有正向有负向时,一定选择正向的答案输出;没有正向答案的时候只好选择负向的。
  • 如果前一步选择的同向答案不唯一,则首先将这些答案按其在书中的编号递增排序,然后输出第 k(≥1)个答案,其中 k=nt​%na​+1,nt​ 是两位用户姓名的汉语拼音字母总数,na​ 是候选输出答案的总数。

输入格式:

输入首先在第一行给出一个正整数 n(≤105),是答案之书中答案的个数。随后 n 行,每行(以回车结束)按下列格式给出一句答案:

答案属性 用汉语拼音给出的答案句子

其中答案属性为 1 表示正向,为 0 表示负向;用汉语拼音给出的答案句子由 4 ~ 8 个中文字的汉语拼音组成,相邻两字间以 1 个空格分隔,每个字的拼音长度不超过 5 个小写英文字母。注意:这里默认第 i 行给出的答案对应编号为 i(1≤i≤n)。
随后一行给出正整数 m(≤103),是前来咨询的用户对数。随后 2m 行,每行(以回车结束)给出一位用户的姓名,由 2 ~ 4 个中文字组成,同样以汉语拼音的格式给出,即相邻两字间以 1 个空格分隔,每个字的拼音长度不超过 5 个小写英文字母。默认每 2 行对应一对用户。

输出格式:

对前来咨询的每一对用户,按照题面给出的规则输出答案之书的答案。如果答案不存在,则输出 tian ji bu ke xie lu(天机不可泄露)。

输入样例:

4
1 que shi wo zai deng nin
0 xiang jian bu ru huai nian
1 qi shi wo zai deng ni
0 zha da nan qi si wo
3
zhang dan ning
qi shao wen
ren huai nan
xiao jin bo
wo bu cun zai
ai

输出样例:

qi shi wo zai deng ni
xiang jian bu ru huai nian
tian ji bu ke xie lu

样例说明:

第 1 对用户可以得到 3 条答案,其中 2 条是正向的。这时 nt​ 是 21,na​ 是 2,则应该输出第 21%2+1=2 条候选答案。
第 2 对用户只能得到 1 条负向的答案。
第 3 对用户找不到答案。

代码展示:

n = int(input())
books = {}
for i in range(n):
    book = input()
    ac = book.split()
    ans = ""
    for nu in ac[1:]:
        ans+=nu[0]
    books[i] = [book[0],book[2:],ans]

m = int(input())
for _ in range(m):
    all = ""
    allt = ""
    one_peo = input()
    one = one_peo.split()
    second_peo = input()
    two = second_peo.split()
    summ = one+two

    sum_mu = len("".join(summ))

    for nu in summ:
        all+=nu[0]
    summs = two+one
    for nu in summs:
        allt+=nu[0]

    result = []
    for value in books.values():
        if all == value[2] or allt == value[2]:
            result.append([value[0],value[1]])

    if len(result) > 1:
        new_result = []
        new_result1 = []
        for n in result:
            if n[0] == "1":
                new_result.append(n)
            if n[0] == "0":
                new_result1.append(n)
        if len(new_result):
           x  = len(new_result)
           print(new_result[sum_mu%x][1])
        else:
           x = len(new_result1)
           print(new_result1[sum_mu%x][1])
    elif len(result) == 1:
        print(result[0][1])
    else:
        print("tian ji bu ke xie lu")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值