zoukankan      html  css  js  c++  java
  • HUNNU11354:Is the Name of This Problem

    http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11354&courseid=0

    Problem description

      The philosopher Willard Van Orman Quine (1908–2000) described a novel method of constructing a sentence in order to illustrate the contradictions that can arise from self-reference. This operation takes as input a single phrase and produces a sentence from that phrase. (The author Douglas R. Hofstadter refers to this process as to Quine a phrase.) We can define the Quine operation like so:

    Quine(A) = "A" A

    In other words, if A is a phrase, then Quine(A) is A enclosed in quotes ("), followed by a space, followed by A. For example:

    Quine(HELLO WORLD) = "HELLO WORLD" HELLO WORLD

    Below are some other examples of sentences that can be created by the Quine operation. Note that Quining allows sentences to be indirectly self-referential, such as the last sentence below.

    "IS A SENTENCE FRAGMENT" IS A SENTENCE FRAGMENT"IS THE NAME OF THIS PROBLEM" IS THE NAME OF THIS PROBLEM"YIELDS FALSEHOOD WHEN QUINED" YIELDS FALSEHOOD WHEN QUINED

    Your goal for this problem is to take a sentence and decide whether the sentence is the result of a Quine operation.

    Input

      The input will consist of a sequence of sentences, one sentence per line, ending with a line that has the single word, END. Each sentence will contain only uppercase letters, spaces, and quotation marks. Each sentence will contain between 1 and 80 characters and will not have any leading, trailing, or consecutive spaces.

    You must decide whether each sentence is the result of a Quine operation. To be a Quine, a sentence must match the following pattern exactly:

    1. A quotation mark
    2. Any nonempty sequence of letters and spaces (call this phrase A)
    3. A quotation mark
    4. A space
    5. Phrase A—exactly as it appeared in (2)

    If it matches this pattern, the sentence is a Quine of the phrase A. Note that phrase A must contain the exact same sequence of characters both times it appears.

    Output

      There will be one line of output for each sentence in the data set. If the sentence is the result of a Quine operation, your output should be of the form, Quine(A), where A is the phrase to Quine to create the sentence.

    If the sentence is not the result of a Quine operation, your output should be the phrase, not a quine.

    Sample Input

    "HELLO WORLD" HELLO WORLD"IS A SENTENCE FRAGMENT" IS A SENTENCE FRAGMENT"IS THE NAME OF THIS PROBLEM" IS THE NAME OF THIS PROBLEM"YIELDS FALSEHOOD WHEN QUINED" YIELDS FALSEHOOD WHEN QUINED"HELLO" I SAIDWHAT ABOUT "WHAT ABOUT"" NO EXTRA SPACES " NO EXTRA SPACES"NO"QUOTES" NO"QUOTES""END

    Sample Output

    Quine(HELLO WORLD)Quine(IS A SENTENCE FRAGMENT)Quine(IS THE NAME OF THIS PROBLEM)Quine(YIELDS FALSEHOOD WHEN QUINED)not a quinenot a quinenot a quinenot a quinenot a quine

    Judge Tips

      A review of quotation marks in strings:  As a reminder, the quotation mark character is a regular character, and can be referred to in C, C++, and Java using the standard single-quote notation, like so:

    '"'

    However, to place a quotation mark inside a double-quoted string in C, C++, and Java, you must place a backslash () in front of it. If you do not it will be interpreted as the end of the string, causing syntax errors. For example:

    "This quotation mark " is inside the string""""""SAID SHE" SAID SHE"

    题意:给出一个字符串,符合"A"A的状况输出Quine(A),否则输出not a quine

    思路:首先从左到右找出第一对双引号里的字符串,然后从右到左找出一个双引号后面的字符串,处理好好比较即可

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    char s1[10005],s2[10005];
    char str[20005];
    
    int main()
    {
        int len,i,l1,l2;
        while(gets(str))
        {
            if(!strcmp(str,"END"))
                break;
            len = strlen(str);
            l1 = l2 = 0;
            if(str[0] != '"')//第一个必须为“
            {
                printf("not a quine
    ");
                continue;
            }
            for(i = 1; i<len; i++)//找到第一对引号内的字符串
            {
                if(str[i]!=34)
                    s1[l1++] = str[i];
                else
                {
                    s1[l1] = '"';
                    break;
                }
            }
            for(i = len-1; i>=0; i--)//从后面开始找到第一个引号出现的位置为止
            {
                if(str[i] == ' ' && str[i-1] == '"')
                {
                    s2[l2] = '';
                    break;
                }
                else
                    s2[l2++] = str[i];
            }
            char tem;
            for(i = 0; i<l2/2; i++)//翻转字符串
            {
                tem = s2[l2-1-i];
                s2[l2-1-i] = s2[i];
                s2[i] = tem;
            }
            if(!strcmp(s1,s2))
                printf("Quine(%s)
    ",s1);
            else
                printf("not a quine
    ");
        }
    
    
        return 0;
    }
    
    


     

  • 相关阅读:
    hibernate配置
    关于memset
    Struts2通配符的使用
    Excel表中的数据导入mysql数据库
    蓝桥杯:错误票据
    蓝桥杯:十六进制转八进制
    Android TabHost中切換、修改需要显示的Activity
    Android图片处理(Matrix,ColorMatrix)
    Android gallery滑动惯性问题
    华为手机在开发Android调试时logcat不显示输出信息的解决办法
  • 原文地址:https://www.cnblogs.com/riskyer/p/3291897.html
Copyright © 2011-2022 走看看