题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1098
Time limit: 1.0 second Memory limit: 64 MB
Problem Description
Holding a collegiate programming contest is a very exhausting work. There is a well-known proverb that one fool can ask so many questions that a hundred clever men will not answer. And during a collegiate programming contest questions are asked by one hundred clever people.
The jury of the Third Urals Collegiate Programming Contest being clever enough has found a simple way to make its work easier. We have invented a simple algorithm that will help us answer ALL your numerous questions! Moreover, this algorithm guarantees that the same questions will have the same answers (this would be hardly possible if we undertake such a task ourselves). According to this algorithm a member of the jury starts to delete characters of the question in the following order:
- Starting from the first character he or she counts out N−1 characters (spaces, punctuation marks etc. are considered to be characters too) and deletes the Nth character.
- If a string ends the count continues from the beginning of the string.
- After deleting a character the count restarts from the character that would be the (N+1)-st in the previous count.
- If the last remaining character is a question-mark ("?") then the answer to the question is "Yes". If it is a space then the answer is "No". Any other character will lead to "No comments" answer.
You should help the jury and write a program that will do a hard work of answering your questions tomorrow. The number N is secret and will not be announced even after the end of the contest. Your program should use N = 1999.
For example, taking a string "Is it a good question?" (its length is 22) the characters will be counted in the following way: "Is it a good question?Is it … quest" and "i" will be deleted. Then the count restarts from "on?Is it…" etc., until "s" will be left (thus the answer is "No comments", as usual).
Input
The input is a question, that is any text containing at least one character (end of line is not a character). Each character of the input (excepting the ends of lines) is a part of the question. You should read the question from the input.
The size of the input is not more than 30000.
Output
The answer.
Samples Input
Does the jury of this programming contest use the
algorithm described in this problem to answer my questions?At least, will anybody READ my question?
This is
UNFAIR!
Samples Output
Yes
No
No comments
Notes
There are no spaces in the sample inputs except for those between words in one line. Thus the first question contains 108 characters, the second contains 40 and the third contains 14.
Problem solving report:
Description: 对输入的字符串,按1999报数,若最后的胜利者为res,根据res对应的字符输出不同的结果。
Problem solving: 约瑟夫问题。
Accepted Code:
/*
* @Author: lzyws739307453
* @Language: C++
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 30005;
char s[MAXN];
int main() {
string str = "";
int len, res = 0;
while (gets(s))
str += s;
len = str.length();
for (int i = 2; i <= len; i++)
res = (res + 1999) % i;
if (str[res] != '?') {
if (str[res] != ' ')
printf("No comments\n");
else printf("No\n");
}
else printf("Yes\n");
return 0;
}