CodeForces 1208 A. Boys and Girls 模拟序列
There are n boys and m girls studying in the class. They should stand in a line so that boys and girls alternated there as much as possible. Let's assume that positions in the line are indexed from left to right by numbers from 1 to n + m. Then the number of integers i(1 ≤ i < n + m) such that positions with indexes i and i + 1 contain children of different genders (position i has a girl and position i + 1has a boy or vice versa) must be as large as possible.
Help the children and tell them how to form the line.
The single line of the input contains two integers n and m (1 ≤ n, m ≤ 100), separated by a space.
Print a line of n + m characters. Print on the i-th position of the line character "B", if the i-th position of your arrangement should have a boy and "G", if it should have a girl.
Of course, the number of characters "B" should equal n and the number of characters "G" should equal m. If there are multiple optimal solutions, print any of them.
3 3
GBGBGB
4 2
BGBGBB
In the first sample another possible answer is BGBGBG.
In the second sample answer BBGBGB is also optimal.
题目大意: n个男孩, m个女孩, 问(i,i+1) 两个小孩性别不一样最对的情况下的排列, 多种任意输出一种即可
解题思路: 数量大的在外,小的在内, 多出来的放到后面即可。
解题代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; char str[300]; int n, m; int main(){ freopen( "input.txt", "r", stdin); freopen( "output.txt", "w", stdout); while( scanf("%d%d",&n,&m) != EOF) { int i, flag = n > m ? 1 : 0; int num = 2*min(n,m); for( i = 0; i < num; i++) { if( flag == 1 ) //boy str[i] = (i&1) ? 'G' : 'B'; else str[i] = (i&1) ? 'B' : 'G'; } for(i = num; i < num+max(n,m)-min(n,m); i++) str[i] = (flag) ? 'B' : 'G'; str[i] = '\0'; puts(str); } return 0; }