ACM学习笔记之1——论边界的重要性

///ACM学习笔记之1——论边界的重要性

ACM学习笔记之1——论边界的重要性

昨天在codeforces上做题的时候,做到一道题把我WA到死(绝望),后来发现自己忘记考虑了一堆边界条件(我是真的菜),在这里重新回顾一下我的艰辛的做题过程。

题目:Codeforces-977C-Less or Equal

因为本人比较菜,而且题目也比较简单,我就直接放出AC代码然后在上面做注释说明了。

#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<list>
#include<cmath>
#include<stack>

using namespace std;

long long a[200001];//这里WA了两次,之前少了个0……
long long n, k, x;
long long current;

int main()
{
	cin >> n >> k;
	if (k > n)
	{
		cout << -1;
		return 0;
	}
	n--;
	for (long long i = 0; i <= n; i++)
	{
		cin >> a[i];
	}
	sort(a, a + n + 1);
	if (a[0] > 1 && k == 0)//这里的边界判断WA了两次才改对……
	{
		cout << a[0] - 1;
		return 0;
	}
	else if(k==0 && a[0]==1)
	{
		cout << -1;
		return 0;
	}
	x = a[0];
	while(current <= n)//这里的代码重写过,改了n次,这里全是边界判断,我就偷懒不说明了……
	{
		while (a[current] <= x)
		{
			current++;
			if (current > n)break;
		}
		if (current == k)
			break;
		if (x > a[n] || current > k)
		{
			x = -1;
			break;
		}
		x = a[current];
	}
	cout << x;
	return 0;
}
发布者 | 2019-07-02T03:03:13+08:00 11月 28th, 2018|ACM, 学习笔记|0条评论

关于作者

blank
坚强大概——并不是指的的结果,而是迈向某个目标的过程吧。

发表评论

召唤伊斯特瓦尔