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 "); 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; } |