3/29百度笔试 第二题代码
核心思想
极限情况为
0 1 2 3 4 …n
谁能达到这种情况谁就赢了,小于这个情况如 0122 也是woman赢
不考虑这个瑕疵,这个代码是ac的,所以我们除去边界情况
如果到0 1 2 3 .。n这个情况还需要n步
那么如果n是奇数,则man赢,是偶数则woman赢
#include <map>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std;
using ll=long long;
int main(){
int N;
cin>>N;
while(N--){
int num;
cin>>num;
vector<int> store_array(num);
for(int i=0;i<num;i++)
cin>>store_array[i];
if(num==1){
if(store_array[0]%2)
cout<<"man"<<endl;
else {
cout<<"woman"<<endl;
}
continue;
}
sort(store_array.begin(),store_array.end());
if(store_array[0]==0&&store_array[1]==0){
cout<<"woman"<<endl;
continue;
}
int equal_count=0;
for(int i=2;i<store_array.size();i++){
if(store_array[i]==store_array[i-1]){
equal_count++;
}
}
if(equal_count>=2){//有两个以上的相等,所以无法man去除,woman赢
cout<<"woman"<<endl;
continue;
}
int extra_number=0;
for(int i=0;i<store_array.size();i++){
int extra=store_array[i]-i;
if(extra<0){//小于0 1 2 3 4 ... n 的极限情况 ,man不管怎么弄都是输
cout<<"man"<<endl;
return 0;
}
extra_number+=extra;
}
//大于0 1 2 3 4 ... n 的极限情况 ,那就看谁能先到极限情况
if(extra_number%2){
cout<<"man"<<endl;
continue;
}
else{
cout<<"woman"<<endl;
continue;
}
}
}