如题,第2个数据点TLE(不支持数据点下载),想请大佬帮忙看下哪里出了问题(如果有数据最好了)谢谢大佬!awa
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,gun,ans;
struct pa{
int wei;//蚂蚁的位置
bool you=true,gan=false;//you为true表示蚂蚁方向向右,gan表示是否感冒
}ant[55];
bool cmp(pa a,pa b)
{
return a.wei<b.wei;
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
{
cin >> ant[i].wei;
if(ant[i].wei<0) ant[i].wei=-ant[i].wei,ant[i].you=false;
}
gun=n;//记录目前木棍上有几只蚂蚁
ant[1].gan=true;
sort(ant+1,ant+1+n,cmp);
while(gun>=1)
{
for(int i=1;i<=n;i++)
{
if(ant[i].wei>0 and ant[i].wei<=100)
{
if(ant[i].you) ant[i].wei++;
else ant[i].wei--;
if(ant[i].wei<=0 or ant[i].wei>100) gun--;//表示蚂蚁离开木棍
}
}
for(int i=2;i<=n;i++)
{
if(ant[i-1].wei>0 and ant[i-1].wei<=100 and ant[i].wei>0 and ant[i].wei<=100)
{
if(ant[i-1].wei==ant[i].wei)//相撞转向
{
ant[i-1].you=!ant[i-1].you;
ant[i].you=!ant[i].you;
if(ant[i-1].gan or ant[i].gan) ant[i-1].gan=ant[i].gan=true;
}
if(ant[i-1].wei>ant[i].wei)//穿过则退回并反向
{
ant[i-1].you=!ant[i-1].you,ant[i-1].wei--;
ant[i].you=!ant[i].you,ant[i].wei++;
if(ant[i-1].gan or ant[i].gan) ant[i-1].gan=ant[i].gan=true;
}
}
}
}
for(int i=1;i<=n;i++) if(ant[i].gan) ans++;
cout << ans;
return 0;
}