为什么这份代码在本地可以运行,但是在洛谷上会TLE
  • 板块学术版
  • 楼主small_moon
  • 当前回复16
  • 已保存回复16
  • 发布时间2025/7/28 11:18
  • 上次更新2025/7/28 15:10:20
查看原帖
为什么这份代码在本地可以运行,但是在洛谷上会TLE
1115392
small_moon楼主2025/7/28 11:18
#include<bits/stdc++.h>
using namespace std;
typedef __int128 Int;
Int read();
int T;
Int a, b;
Int base[70];
bool solve()
{
	a = read(); b = read();
	bool visa[65] = {}, visb[65] = {};
	int cnta = 0, cntb = 0;
	for (int i = 64; i >= 0; i--)
		if (a >= base[i]) visa[i] = 1, a -= base[i], cnta++;
	for (int i = 64; i >= 0; i--)
		if (b >= base[i]) visb[i] = 1, b -= base[i], cntb++;
	if (cnta < cntb) return 0;
	if (cntb == 0) return 1;
	int pb = 0, pe = 64;
	while (!visb[pb] && pb <= 64) pb++;
	while (!visb[pe] && pe > 0) pe--;
	string sb = "";
	for (int i = pb; i <= pe; i++)
		sb += (char)(visb[i] + '0');
	int len = pe - pb;
	for (int i = 0; i <= 64; i++)
	{
		if (len + i > 64) break;
		string tmp = "";
		for (int j = i; j <= len + i; j++)
			tmp += (char)(visa[j] + '0');
		if (tmp == sb) return 1;
	}
	return 0;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	base[0] = 1;
	for (int i = 1; i <= 64; i++)
		base[i] = base[i - 1] << 1;
	cin >> T;
	while (T--)
	{
		if (solve()) puts("Yes");
		else puts("No");
	}
	return 0;
}
Int read()
{
	Int x = 0, f = 1; char ch = getchar();
	while (ch < '0' || ch>'9')
	{
		if (ch == '-') f = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9')
	{
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}
2025/7/28 11:18
加载中...