思考
感觉题目有点迷惑的意思,要最小化操作 \(1\) 使用的次数,也就是要节约修改操作,让我们认为操作 \(1\) 是最有用的,其实只要稍微动动脑子想一想,删除操作才是最有用的,而交换操作根本没用。
当将序列删除到只剩两个点时,就把两个点连上,度都为 \(1\)。
所以如果序列中 \(1\) 的数量超过了 \(2\) 或相等,就可以根本不用修改操作,删除到序列中只剩下两个 \(1\) 为止,而如果数量小于 \(2\),那么直接输出 \(2\) 减去 \(1\) 的数量就好了。
总结一下:
- 如果 \(1\) 数量大于等于 \(2\),那么输出 \(0\)。
- 如果 \(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;
}
标签:cout,int,题解,P9077,Poddrzewo,序列,操作,数量
From: https://www.cnblogs.com/BadBadBad/p/18081613/P9077