第一题:争吵问题
有一个队列,每个人要么朝左边(L表示),要么朝右边(R表示),因为每个人都讨厌其他任何人,只要两人面对面就会发生真吵。真吵结果是胜者留在队列中,败的人移除队中。
如果序列中有多对争吵,可以任选一对,胜者留在队中,败者出局,求最后队列最少人数是多少。
例子:
LRLRLRR
输出:3
LRR。
思路:这道题找到方法了就很简单,依据题意 如果要真吵就只有 RL (两人对面)这种情况 ,其他 LL RR LR 都不会发生真吵。
所以我们只要从左边向右找到第一个R,从右边向左找到第一个L。那么这两人以及之间的人最终只有一个人留下。
程序代码如下:
#include
#include<string>
int main(){
string str;
while(cin>>str){
int n=str.size();
int m=-1,k=-1;
for(int i=0;i)
if(str[i]=='R'){
m=i;
break;
}
for(int i=n-1;i>=0;i--)
if(str[i]=='L'){
k=i;
break;
}
if(m==-1||k==-1||k<m)
cout<endl;
else
cout<endl;
}
return 0;
}
第二题:球队问题
有n对球队进入总决赛,现在要进行淘汰赛,每每两队都进行一场比赛,最终前n/2队进入下一轮淘汰赛。
排名规则:
球队胜一场得3分,平一场得1分,输一次得0分。
积分越高排名越前,积分相同,看净胜球数,越多越靠前,净胜球数相同,看进球数,进球越多越靠前(例子最终都会排出名次)。
求进入淘汰赛的球队。
例子:
4
A
B
C
D
A-B 3:1
A-C 2:1
A-D 0:3
B-C 5:6
B-D 1:2
C-D 1:1
输出:
D
C
程序代码如下:
#include
#include<string>
#include