一个班上有n个学生,学生编号从1到n,班主任现在要给这n个人安排座位,每两个人坐一桌。学生们都不是很乖,如果两个编号相邻的人坐在一起的话就会经常说话,影响学习,所以编号相邻的人不能坐在一起。这些学生要么是左撇子,要么是右撇子,安排座位时不能出现右撇子在左,左撇子在右的情况,不然写字的时候手容易碰在一起,也会影响学习。请问如何安排座位?
Input
有多组测试数据,对于每组测试数据,第一行为一个整数n(2<n<=100),n保证为偶数,第二行一个字符串,长度为n,表示1到n号学生是左撇子还是右撇子,左撇子用L表示,右撇子用R表示。
Output
对于每组测试数据,输出座位的安排,共有n/2行,每个是两个用一个空格隔开的两个整数a和b,表示编号为a的学生和编号为b的学生。如果有多组解,输出任意一组即可。
相邻两组测试数据之间用空行隔开。
Sample Input
6 LLRLLL 4 RRLL
Sample Output
1 4 2 5 6 3 3 1 4 2
一道我没写出来的题目,实在太菜了。
题目的要求是序号不能挨着坐,同样左撇子和右撇子不能互相碰到(就是左撇子在左排,右撇子在右排),其他都是可以的(两个左撇子和两个右撇子是可以坐的)。一开始没有什么思路,将问题复杂化了,看了看题解,就是一个LLRLLL 分两半,看他们的手往哪里撇,就这样一个一个判断就可以了,一个for 循环就可以解决。(数学不行)。
#include<bits/stdc++.h>
#include<iostream>
#include<stdio.h>
using namespace std;
const int maxn=1005;
typedef long long ll;
int main()
{
int i,j;
int t;
int g=0;
while(cin>>t)
{
if(g)
cout<<endl;
g=1;
string s;
cin>>s;
int len=s.length();
for(i=0;i<len/2;i++)
{
if(s[i]==s[i+len/2])
cout<<i+1<<' '<<i+1+len/2<<endl;
else if(s[i]=='R'&&s[i+len/2]=='L')
cout<<i+len/2+1<<' '<<i+1<<endl;
else
cout<<i+1<<' '<<i+len/2+1<<endl;
}
}
return 0;
}
就是这么简单 ,将问题复杂化了。