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:
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\n");
continue;
}
len=strlen(str);
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
count=0;
for(i=0; i<len; i++)
{
if(str[i]=='"')
count++;
}
if(count>2)
{
printf("not a quine\n");
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]=='\0')
{
if(strcmp(a,b)==0)
tag=1;
}
}
if(tag)
printf("Quine(%s)\n",a);
else
printf("not a quine\n");
}
return 0;
}
|

浙公网安备 33010602011771号