zoukankan      html  css  js  c++  java
  • HUNAN NORMAL UNIVERSITY ACM 11354

    Is the Name of This Problem
    Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:32768KB
    Total submit users: 23, Accepted users: 21
    Problem 11354 : No special judgement
    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 SAID
    WHAT 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 quine
    not a quine
    not a quine
    not a quine
    not a quine

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main()
    {
        char str[1000],a[1000],b[1000];
        int i,len,j,count,flag,t,tag;
        while(gets(str)&&(strcmp(str,"END")!=0))
        {
            if(str[0]!='"')
            {
                printf("not a quine
    ");
                continue;
            }
            len=strlen(str);
            memset(a,'',sizeof(a));
            memset(b,'',sizeof(b));
            count=0;
            for(i=0; i<len; i++)
            {
                if(str[i]=='"')
                    count++;
            }
            if(count>2)
            {
                printf("not a quine
    ");
                continue;
            }
            flag=1;
            tag=0;
            for(i=0; i<=len; i++)
            {
                if(str[i]=='"')
                {
                    flag=!flag;
                    t=0;
                    if(flag!=0)
                    {
                        if(str[i+1]==' ')
                            i+=2;
                        else
                        {
                            tag=0;
                            break;
                        }
                    }
                    else
                        i+=1;
                }
                if(flag==0)
                {
                    a[t++]=str[i];
                    continue;
                }
                if(flag!=0)
                {
                    b[t++]=str[i];
                }
                if(str[i]=='')
                {
                    if(strcmp(a,b)==0)
                        tag=1;
                }
            }
            if(tag)
                printf("Quine(%s)
    ",a);
            else
                printf("not a quine
    ");
        }
        return 0;
    }
  • 相关阅读:
    添加一个下拉框到DataGrid
    .NET2.0抓取网页全部链接 (转)
    C# 中 enum的总结
    NAT和NAT穿透
    [转]为什么在DllMain里不能调用LoadLibrary和FreeLibrary函数?
    Win32 SDK 创建加速键表。
    转了无数次。继续转。 就是关于TCP的侦活
    浅析Windows操作系统中的线程局部存储(TLS)机制
    API函数ShellExecute与ShellExecuteEx用法
    转:FreeLibraryAndExitThread DLL中线程的安全退出
  • 原文地址:https://www.cnblogs.com/lxm940130740/p/3293035.html
Copyright © 2011-2022 走看看