ccf csp 2019年二题 小明种果树(续)

吐槽:

小明同学实在是太累了,以后我喜欢逃跑的逃之夭夭同学很愿意帮助小明同学干这些活,发家致富!!!

题意:

我相信能看到这个博客的人肯定自己已经看过题了,这里我就不再赘述了。

思路:

思路就是老老实实读进来然后加啊。这里其实我想着重强调的是有些树会多次落果,如果一棵树多次落果那么他还是算一棵树这里一定要注意啊,一直错一直错,一直想不通,然后到上网,查博客他们的方法死复杂死复杂还不说明白,最后我用的控制变量法找到问题的所在(用的我的代码混杂别人的思路最后发现原来是算落果果树的那个步骤WA掉了,这种细节问题我这种粗枝大叶的男人哎真是个可爱的小垃圾。)

代码:

代码当中有很多步骤是多余的,是我控制变量法时候留下的痕迹请自行删除掉,反正AC了哎真是心累,昨天晚上都没睡好觉,一直在脑袋里模拟过程调用,然后还想是不是哪个测试点有问题。最后发现竟然这种弱智问题。。哭哭哭

#include 
#include 
#include 
/*注意有的树会多次落果,多次落果的树算一棵树*/
using namespace std;
struct
{
     
	int a;
	bool b;
}ssbool[1007];

bool sssbool[1007];
int main()
{
     
	ios::sync_with_stdio(false);

	int N, qzg = 0, E = 0;
	vector<int> _v;
	cin >> N;

	for (int i = 1; i <= N; i++)
	{
     
		int n;
		cin >> n;
		for (int j = 1; j <= n; j++)
		{
     
			int t;
			cin >> t;
			if (j == 1)
			{
     
				ssbool[i].a = t;
				ssbool[i].b = false;
				sssbool[i] = false;
				continue;
			}

			if (t > 0)
			{
     
				if (t != ssbool[i].a)
				{
     
					auto a = find(_v.begin(),_v.end(),i);
					ssbool[i].a = t;
					ssbool[i].b = true;
					sssbool[i] = true;
					if (a == _v.end())
						_v.push_back(i);
				}
					
			}
			else
			{
     
				
				ssbool[i].a += t;
			}
		}

	}

	int _vs = 0;
	for (int i = 1; i <= N; i++)
	{
     
		qzg += ssbool[i].a;
		if (ssbool[i].b)
			_vs++;
	}

	for (long long int i = 1; i <= N; i ++)
	{
     
		if (sssbool[i])
		{
     
			if (i == 1 && sssbool[N] && sssbool[i + 1])
				E++;
			else if (i == N && sssbool[i - 1] && sssbool[1])
				E++;
			else if (sssbool[i - 1] && sssbool[i + 1])
				E++;
		}
	}

	printf("%d %d %d\n", qzg, _v.size(), E);
	return 0;
}

最后还是欢迎交流:

QQ:1364388975

你可能感兴趣的:(ccf,c++,算法)