【玄学】不同输入方式使仅hack数据WA
查看原帖
【玄学】不同输入方式使仅hack数据WA
294244
Ritel楼主2024/9/14 10:51
  • 值得注意的是,在本地(VS)测试最后一个点(#subtask1)的数据,使用以下两种方法,答案都是正确的。

  • 最后一个点的数据是,50000 49999 ...3 2 1 1 2 3 ... 49999 50000

代码1:使用cin配合getchar()输入,在luoguOJ中得到Ques1的结果为50002,正确答案是50001

#include <iostream>

int a[100050] = { 50050 }, dp[100050];
int b[100050], ans2;
int tail[100050] = { 50050 };

int BinSrc1(int n, int l, int r)
{

	if (r <= 1)
		return 1;

	int m = (l + r) / 2;

   // tail[] descends
	if (n <= tail[m - 1] && n > tail[m])
		return m;

	if (n > tail[m - 1])
		return BinSrc1(n, l, m);
	if (n <= tail[m])
		return BinSrc1(n, m + 1, r);

	/*
    for (int i = l; i <= r; i++)
	{
		if (n <= tail[i - 1] && n > tail[i]) return i;
	}
	std::cout << "ERROR";
	return -1;
   */
}

int BinSrch(int n, int l, int r)
{
	if (r == 0)
		return 0;

	int m = (l + r) / 2;

	if (n == b[m])
		return m;

	if (n > b[m] && n <= b[m + 1])
		return m + 1;

	if (n < b[m])
		return BinSrch(n, l, m);
	if (n > b[m + 1])
		return BinSrch(n, m, r);
}

int main()
{
	int cnt = 0, ans1 = 0;
	bool f = false;
	do {
		cnt++;
		std::cin >> a[cnt];

		if (a[cnt] <= tail[ans1])
		{
			tail[ans1 + 1] = a[cnt];
			ans1++;
		}
		else
		{
			int k = BinSrc1(a[cnt], 1, ans1);
			tail[k] = a[cnt];
		}

		/*
		for (int i = 0; i < cnt; i++)
		{
			if (a[i] >= a[cnt])
				if (dp[cnt] <= dp[i] + 1)
				{
					dp[cnt] = dp[i] + 1;
				}
		}
		if (dp[cnt] == 0) dp[cnt] = 1;

		if (dp[cnt] > ans1) ans1 = dp[cnt];
		*/

	} while (getchar() == ' ');

	std::cout << ans1 << std::endl;

	for (int i = 0; i <= cnt; i++)
	{
		bool flag = false;
		if (a[i] > b[ans2])
		{
			ans2++;
			b[ans2] = a[i];
		}
		else
		{
			// b[] ascends
			int j = BinSrch(a[i], 0, ans2);
			bool isEQ = a[i] == b[j];
			b[j] = a[i];
			if (!isEQ)
				for (int k = j; k > 0; k--)
				{
					// Keep b[] ascending
					if (b[k] >= b[k - 1]) break;
					std::swap(b[k], b[k - 1]);
				}
		}
	}
	std::cout << ans2;

	return 0;
}

修改后:使用while(cin>>x)输入,AC通过

while(std::cin >> a[++cnt])
	{

		if (a[cnt] <= tail[ans1])
		{
			tail[ans1 + 1] = a[cnt];
			ans1++;
		}
		else
		{
			int k = BinSrc1(a[cnt], 1, ans1);
			tail[k] = a[cnt];
		}
	}
  

有没有大佬知道是什么原因导致的该问题orz

2024/9/14 10:51
加载中...