题意:就是围成一个环,有坏人有好人,让你找到n个坏人应该在的位置,以便全部处死。

WWWW,原因是因为没有把坏人去掉,在重新选坏人位置时是包括以前的坏人的。

#include<bits/stdc++.h>

using namespace std;

int main(){
	int n,m;
	while(cin>>n>>m){
		vector<char> st;
		 for(int i=0; i<2*n; i++)
            st.push_back('G');  
            
		int pos = 0;  
        for(int i=0; i<n; i++){  
            pos = (pos+m-1) %(2*n-i);
            st[pos] = 'B';
		 }
		cout<<st[0];
		int tot = 1; 
		for(int i=1;i<=2*n-1;i++){
			if(tot % 50==0){
				cout<<st[i]<<endl;
				
			}
			else{
				cout<<st[i];
			}
		}
		cout<<endl;
		st.clear();
	}
	return 0;
}

ac代码

#include <bits/stdc++.h>

using namespace std;

int main(){
    vector < int > table;
    int n,m;
    while(~scanf("%d %d",&n,&m)){
        table.clear();  //清空
        for(int i=0; i<2*n; i++)
            table.push_back(i);  //初始化

        int pos = 0;  //记录当前位置
        for(int i=0; i<n; i++){  //处死n个人
            pos = (pos+m-1) % table.size();
            //圆桌是个环,我们可以认为是很多很多个一样的数组,相邻接着
            table.erase(table.begin() + pos);  //table里把赶走的人去掉,人数减一
        }

        int j = 0;
        for(int i=0; i<2*n; i++){  //打印预先安排的座位
            if(!(i%50) && i)
                //实现50个字母换一行(注意i=0时不应该换行,所以&&i)
                cout<<endl;
            if(j<table.size() && i==table[j]){
                //因为i是从小到大遍历的,
                //而table里的元素我们初始化时包括去掉某些元素,移动过程中,也是保持的从小到大的次序不变的
                //所以可以只是遍历i,自然就是先匹配上较小的table[j]
                j++;
                cout<<"G";  //table中留下的都是好人
            }else
                cout<<"B";
        }
        cout<<endl<<endl;  //相邻数据组间留一个空行
    }
    return 0;
}