您的位置:首页 > 其它

ACM复习(41)10688 XYM-AC之路

2018-03-17 21:01 316 查看
Description

在华农的众ACMers中,有着一位家喻户晓、人称一鸣惊人的DP神牛—XYM。由于XYM太出名了,他的仰慕者决定给XYM写一部个人传奇以传承他光辉的AC之路。

为了使故事更加真实,特派记者Y决定去采访XYM教主。由于XYM太出名了,而且时间很忙,他对于每个问题只会回答Yes或No。由于这是记者Y第一次跟XYM教主

面对面访谈,他十分紧张,所以他可能会重复问同一个问题,但对于相同的问题XYM都会是相同的回答。记者Y有个特殊的癖好,每问完一个问题,他都会把这

个问题和XYM教主的回答分开记下来。

然而,不幸的是,Y在回去的路上不小心把记有XYM的回答的纸条弄丢了,只剩下一些问题。可怜的记者Y决定将XYM教主所有可能的回答的组合全部写出来。

这样,他就有可能认出那个才是XYM的回答。

不过Y不知道一共要写多少才行,所以他想向聪明的你求救,一共有多少组可能的回答组合他需要写出来的?

输入格式

第一行只有一个正整数T,表示题目共有T组数据

接下来是T组数据。

每组数据第一行输入一个整数n(1<= n <= 50),

接下来有n行,每行输入一个问题que[i],表示Y第i个问的问题是什么。

每个问题最多由50个字符组成,每个问题只包含小写字母 (‘a’-‘z’),大写字母 (‘A’-‘Z’), 问号 (‘?’) 或者下划线 (‘_’).两个问题问题被认为相同当且仅当组成问题的所有字符一一对应 相同。

输出格式

对于每组数据输出一个整数,表示所有可能的回答的组合的方案数。

输入样例

3

3

How_are_you_doing?

How_do_you_like_our_country?

How_are_you_doing?

1

Whazzup?

4

Do_you_like_my_story?

Do_you_like_my_story

DO_YOU_LIKE_MY_STORY?

Do__you__like__my__story?

输出样例

4

2

16

提示

对于第一组数据,一个有四种可能的回答组合

“Yes”, “Yes”, “Yes”;

“Yes”, “No”, “Yes”;

“No”, “Yes”, “No”;

“No”, “No”, “No”.

解题思路

找出多少个不同字符串而已,代码几乎和 10693 PKKJ的生日礼物 一样

#include<stdio.h>
#include<math.h>
int main()
{
int t, n, total, e, q;
char str[51][51];
scanf("%d", &t);
while(t --)
{
scanf("%d", &n);
total = n;
for(int i = 0; i < n; i ++)
scanf("%s"
4000
, &str[i]);
for(int i = 0; i < n - 1; i ++)
{
// @开头代表是重复字符串
if(str[i][0] == '@')
continue;
for(int j = i + 1; j < n; j ++)
{
e = q = 0;
while(str[i][e] != '\0' && str[j][q] != '\0' && str[i][e] == str[j][q])
{
e ++;
q ++;
}
if(str[i][e] == '\0' && str[j][q] == '\0')
{
str[j][0] = '@';
total -= 1;
}
}
}
printf("%.0lf\n", pow(2, total));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: