题意:就是围成一个环,有坏人有好人,让你找到n个坏人应该在的位置,以便全部处死。
WWWW,原因是因为没有把坏人去掉,在重新选坏人位置时是包括以前的坏人的。
代码语言:javascript复制#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代码
代码语言:javascript复制#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(!(iP) && 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;
}