首页 > ACM题库 > HDU-杭电 > Hdu 1585 Auto Love-letter Maker 待解决 [解题报告] C++
2013
12-12

Hdu 1585 Auto Love-letter Maker 待解决 [解题报告] C++

Auto Love-letter Maker

问题描述 :

As the Valentine’s Day is comeing soon, Gardon is anxious about how to write a perfect love-letter to his girlfriend. But because of his poor Emotional quotient, he will never write a perfect love-letter. There is no doubt that roses must come with a love-letter! However, fortunately, Gardon has invented a powerful tool: Auto Love-letter Maker(ALM).
Gardon had spent more than twenty years on ALM though he’s only eighteen years old. It follows the principle of GNU General Public License, so we can discover the rules of his algorithm:
1, A love-letter will always be ended with "Love you! yours Gardon". The word "Gardon" is not generated by algorithm.
2, A love-letter will always begin with "Dear Angel".
3, The text of love-letter is generated by some rule called "Markov Words Link". The next word is generated by the last two words.
For example, this ruls is:
dear angel ==> i
angel i ==> miss love wanna
i miss ==> you
i love ==> you
i wanna ==> be
love you ==> for yours
miss you ==> i
you i ==> love
wanna be ==> with
be with ==> you
with you ==> for
you for ==> ever
for ever ==> i love
ever i ==> wanna
ever love ==> you
So we can get this short love-letter:

Dear Angel:
I miss you!I love you for ever!I wanna be with you for ever!
Love you!
Yours, Gardon.

But Gardon find that if he tried to use a rule template which is more complex, it is probable the letter will never stop! After checking the algorithm, he has learned the matter is brought by the Markov rule. So now, he need you help him to check all the words-link template.

输入:

Input contains serveral words-links rules.each rule begin with a line "**BEGIN**" and end with a line "** END **". each line will contain at least three ,at most thirty words: The first two words represent the rule case, and follow with all the valid words.
You can firmly assume that there will not be more than 10000 differents word in one case. Each word is a string of lower-case letters,and its length will not exceed 20. And I can tell you there is no more than 10000 rules.

输出:

Output your answer with the following rules:
1. It will NEVER reach the end, or two words which do not exist in the rules’s first two words will ALWAYS appear , print "Bad template!".
2. It can POSSIBLY reach the end or two words which do not exist in the rules’s first two words MAY appear , print "Imperfect template!".
3. It can ALWAYS reach the end and two words which do not exist in the rules’s first two words NEVER appear , print "Perfect template!".

样例输入:

**BEGIN**
dear angel i
angel i miss love wanna
i miss you
i love you
i wanna be
love you for yours
miss you i
you i love
wanna be with
be with you
with you for
you for ever
for ever i love
ever i wanna
ever love you
** END **
**BEGIN**
dear angel i
angel i abcd
love you yours
** END **
**BEGIN**
dear angel i
angel i dear
i dear angel
** END **
**BEGIN**
dear angel love
angel love you
love you yours
** END **

样例输出:

Imperfect template!
Bad template!
Bad template!
Perfect template!


  1. #include <stdio.h>
    int main(void)
    {
    int arr[] = {10,20,30,40,50,60};
    int *p=arr;
    printf("%d,%d,",*p++,*++p);
    printf("%d,%d,%d",*p,*p++,*++p);
    return 0;
    }

    为什么是 20,20,50,40,50. 我觉得的应该是 20,20,40,40,50 . 谁能解释下?