Sample Output
1
这个题如果真的要按照题目说的思路来的话那真的要考虑很多
其实你可以发现两只蚂蚁掉头可以看作蚂蚁均直行,只要考虑带病蚂蚁属性的变化就好了
如果带病蚂蚁(A)向左走,那么是不是再A左边的蚂蚁只要向右走就会得病,在A右边的蚂蚁向左走的(C),如果A左边有向右走的,他会经过A蚂蚁去感染C
所以这是一种考虑情况,另一种类似
#include
#include
#include
#include
#include
using namespace std;
bool cmp(int c,int d)
{
if(fabs(c) < fabs(d)) return 1;
else return 0;
}
int main()
{
int n,flag1 = 0,flag2 = 0;
int i,cnt1 = 0,cnt2 = 0;
int gm,ret = 1;
int om[55],l,r;
cin>>n;
for(i = 0;i < n;i++)
{
cin>>om[i];
}
gm = om[0];
sort(om,om + n,cmp);
// for(i = 0;i < n;i++)
// {
// cout< 0)
{
for( i = 0;i < n;i++)
{
if(fabs(om[i]) <= gm && om[i] != gm)
{
if(om[i] > 0)
{
cnt2++;
}
continue;
}
else
{
if(om[i] < 0)
{
cnt1++;
flag1 = 1;
}
}
}
ret += cnt1;
if(cnt1 != 0)
{
ret += cnt2;
}
cout< 0 )
{
cnt1++;
}
}
else
{
if(om[i] < 0)
{
cnt2++;
}
}
}
//cout< 0)
// {
// for(i = 1;i < n;i++)
// {
// if(om[i] < 0 && fabs(om[i] > gm))
// {
// cnt++;
// flag = 1;
// }
// }
// }
return 0;
}
再有一种比较方便点的想法
#include
#include
using namespace std;
int main()
{
int n,x,f[110] = {0},t,sum = 1,sum1 = 0,sum2 = 0;
int flag1 = 0,flag2 = 0,flag ;
cin>>n;
for(int i=0;i>x;
if(i==0)
{
x>0 ? t = x , flag = 1 : t = -x , flag = -1; //找到分界点
}
x > 0 ? f[x] = 1:f[-x] = -1; //判断方向
}
for(int i = 0;i < t;i++)
{
if(f[i] == 1)
{
flag = 1;
sum1++;
}
}
for(int i = t + 1;i < 110;i++)
{
if(f[i] == -1)
{
flag2 = 1;
sum2++;
}
}
if(flag )
{
sum += sum2;
if(sum2)
{
sum += sum1;
}
}
else
{
sum += sum1;
if(sum1)
{
sum += sum2;
}
}
cout<