48分TLE求助
查看原帖
48分TLE求助
1051943
Curry_mvp楼主2024/4/27 10:49

评测记录 差不多是一半AC一半TLE

应该是要用二分(但是本人二分学的不好)问问dalao对于这段程序如何合理安排二分???

代码如下:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=200005;
int x[maxn];
int xishu;//用于存储x的系数
char xx;//临时存储x
char c;//存储+-号
int c1;//存储=左边的常数
char c2;//存储等号
int c3;//存储等号右边的常数
signed main ()
{
	int n;
	int q;
	cin>>n>>q;
	for(int i=1; i<=n; i++)
	{
		cin>>xishu>>xx>>c>>c1>>c2>>c3;
		if(c=='+')
		{
			x[i]=(c3-c1)/xishu;//用于求出方程的解 
		}
		if(c=='-')
		{
			x[i]=(c3+c1)/xishu;
		}
		//cout<<x[i]<<"\n";
	}
	sort(x+1,x+n+1);
	while(q--)
	{
		int ans=0;
		int l,r;
		cin>>l>>r;
		for(int i=l; i<=r; i++)//挨个枚举 
		{
			for(int j=1; j<=n; j++)
			{
				if(x[j]==i)
				{
					ans++;
					if(x[j]==x[j+1])
					{
						ans--;
					}//单纯就是为了去重
					//把刚刚因为重复加上去的再减掉
					//问题就是如何把这个合理加到二分里 
				}

			}
		}
		cout<<ans<<"\n";
	}
	return 0;
}

2024/4/27 10:49
加载中...