题目:
仔细看看题目,这题恶心死我,没看清楚题目搞了1小时才出sample,幸好1Y。提醒几点:
(1)终止条件:每个人都接到过球(第一个人不算接到过)
(2)特殊情况处理:如果待传球的人是自己,则将球传到自己的(不是传球人)反方向
代码:
1 # include <iostream>
2 # include <cstring>
3 using namespace std;
4 char data[31];
5 int n,c;
6 bool used[31];
7 int main()
8 {
9 while(true)
10 {
11 int t;
12 cin>>n;
13 if(!n) break;
14 cin>>t;
15 for(int i=0;i<n;i++)
16 cin>>data[i];
17 int ans=1,p=t-1,last=0;
18 c=n-1;
19 memset(used,0,sizeof(used));
20 used[p]=true;
21 do
22 {
23 int orip=p;
24 switch(data[p])
25 {
26 case 'L':
27 if(p==(last-1+n)%n) p=(p-1+n)%n;
28 else p=(last-1+n)%n;
29 data[orip]='R';
30 break;
31 case 'R':
32 if(p==(last+1)%n) p=(p+1)%n;
33 else p=(last+1)%n;
34 data[orip]='L';
35 break;
36 };
37 last=orip;
38 if(!used[p]) used[p]=true,c--;
39 ans++;
40 }while(c>0);
41 cout<<"Classmate "<<p+1<<" got the ball last after "<<ans<<" tosses."<<endl;
42 }
43 return 0;
44 }