「须知少时|

BadBadBad__AK

园龄:1年6个月粉丝:13关注:6

P9077 [PA2018] Poddrzewo 题解

思考

感觉题目有点迷惑的意思,要最小化操作 1 使用的次数,也就是要节约修改操作,让我们认为操作 1 是最有用的,其实只要稍微动动脑子想一想,删除操作才是最有用的,而交换操作根本没用。

当将序列删除到只剩两个点时,就把两个点连上,度都为 1

所以如果序列中 1 的数量超过了 2 或相等,就可以根本不用修改操作,删除到序列中只剩下两个 1 为止,而如果数量小于 2,那么直接输出 2 减去 1 的数量就好了。

总结一下:

  1. 如果 1 数量大于等于 2,那么输出 0
  2. 如果 1 数量小于 2,那么输出 0

Code

#include <bits/stdc++.h>
using namespace std;
int a[1000005];
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	int ans=0;//1的数量
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(a[i]==1)
		{
			ans++;//如果为1就++
		}
	}
	cout<<max(0,2-ans)<<endl;//核心代码,也可以用下面的代码
	/*
	if(ans>=2)
	{
		cout<<0<<endl;
	}
	else
	{
		cout<<2-ans<<endl;
	}
	*/
	cout<<2<<endl;
	cout<<1<<" "<<2;
	return 0;
}

本文作者:BadBadBad__AK

本文链接:https://www.cnblogs.com/BadBadBad/p/18081613/P9077

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   BadBadBad__AK  阅读(21)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起