#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int SIZE = 50;
struct Node
{
int id;
int num;
int symbol;
}node[SIZE];
int n, direction, symbol;
bool cmp(Node a, Node b)
{
if(abs(a.num) < abs(b.num))
return true;
return false;
}
void go_left()
{
int sum = 0, cnt = 0;
for(int i = 1; node[i].id != 1; ++i)
{
++cnt;
if(node[i].symbol != symbol) ++sum;
}
if(node[1].id == 1) //left side is null
{
cout << 0 << endl;
return ;
}
else if(sum == 0) // left side is not null && do not have a contrary ant
{
cout << 0 << endl;
return ;
}
else
{
for(int i = cnt + 2; i <=n; ++i)
{
if(node[i].symbol == symbol) ++sum;
}
cout << sum + 1 << endl;
return ;
}
}
void go_right()
{
int sum = 0, cnt = 0;
for(int i = n; node[i].id != 1; --i)
{
++cnt;
if(node[i].symbol != symbol) ++sum;
}
if(node[n].id == 1) //right side is null
{
cout << 0 << endl;
return ;
}
else if(sum == 0) // right side is not null && do not have a contrary ant
{
cout << 0 << endl;
return ;
}
else
{
for(int i = 1; i < n - cnt; ++i)
{
if(node[i].symbol == symbol) ++sum;
}
cout << sum + 1 << endl;
return ;
}
}
int main()
{
cin >> n;
for(int i = 1; i <= n; ++i)
{
cin >> node[i].num;
if(node[i].num < 0) node[i].symbol = 0; // left
else node[i].symbol = 1; // right
node[i].id = i;
}
direction = node[1].id;
symbol = node[1].symbol;
sort(node + 1, node + 1 + n, cmp);
if(symbol == 0) go_left();
else go_right();
return 0;
}
第一次错误原因在于把感冒蚂蚁向左运动和向右运动混淆在一起了