求助,第2个数据点TLE,想请大佬帮忙调一下,谢谢!
查看原帖
求助,第2个数据点TLE,想请大佬帮忙调一下,谢谢!
324480
82Young_UwU楼主2022/11/13 18:04

如题,第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;
	
}
2022/11/13 18:04
加载中...