222142026-01-14 17:55:09PappMatyasAutókódoláscpp17Elfogadva 50/502ms500 KiB
#include <iostream>

using namespace std;

unsigned long long ULLMAX = 0xFFFFFFFFFFFFFFFF;
unsigned long long ULL_LAST_BIT = 0x8000000000000000;

static long long GetLower(long long n)
{
	unsigned long long i = 1;
	long long fzero = -1;
	long long fone = -1;
	while (i <= ULL_LAST_BIT)
	{
		unsigned long long bit = n & i;
		if (bit == 0)
		{
			fzero = i;
		}
		else
		{
			if (fzero != -1)
			{
				fone = i;
				break;
			}
		}
		if (i == ULL_LAST_BIT)
		{
			break;
		}
		i <<= 1;
	}
	if (fzero == -1 || fone == -1)
	{
		return -1;
	}
	n ^= fzero;
	n ^= fone;

	unsigned long long rembits = fzero - 1;
	unsigned long long rem = rembits & n;
	unsigned long long lastBit = fzero >> 1;
	n &= ~rembits;
	int lim = 0;
	while ((rem & lastBit) == 0 && lim < 64)
	{
		rem <<= 1;
		lim++;
	}

	n |= rem;

	return n;
}

static long long GetHigher(long long n)
{
	unsigned long long i = 1;
	long long fzero = -1;
	long long fone = -1;
	while (i <= ULL_LAST_BIT)
	{
		unsigned long long bit = n & i;
		if (bit != 0)
		{
			fone = i;
		}
		else
		{
			if (fone != -1)
			{
				fzero = i;
				break;
			}
		}
		if (i == ULL_LAST_BIT)
		{
			break;
		}
		i <<= 1;
	}
	if (fzero == -1 || fone == -1)
	{
		return -1;
	}
	n ^= fzero;
	n ^= fone;

	unsigned long long rembits = fone - 1;
	unsigned long long rem = rembits & n;
	n &= ~rembits;
	int lim = 0;
	while ((rem & 1) == 0 && lim < 64)
	{
		rem >>= 1;
		lim++;
	}

	n |= rem;
	return n;
}

int main()
{
	unsigned long long n;
	cin >> n;

	cout << GetLower(n) << endl;
	cout << GetHigher(n) << endl;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms364 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva2/21ms316 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva2/22ms500 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva4/41ms316 KiB
9Elfogadva4/41ms316 KiB
10Elfogadva4/41ms316 KiB
11Elfogadva4/41ms316 KiB
12Elfogadva4/41ms316 KiB
13Elfogadva4/42ms492 KiB
14Elfogadva4/41ms500 KiB
15Elfogadva4/41ms316 KiB
16Elfogadva4/41ms316 KiB
17Elfogadva4/41ms316 KiB