Dashboard - Codeforces Round 1011 (Div. 2) - Codeforces
Problem - B - Codeforces
题目大意:
给你一个数组,你可以用一段子序列中没有出现的最小非负整数,替换数组中的组序列,经过若干操作,让数组变为长度为1,值为0。
方法:
题目没用让我们找到最佳操作,所有就按最简单的来,我就不断找0,找到0,如果他是倒数第一个,我就删除数组倒数2个数,然后插入1(不用替换为未出现最小的整数,太麻烦)
如果不是,就删除0和后面一个数,插入1;
来看代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
vector<int>arr(n);
vector<int>zero(0);
vector<int>brr(0);
for(int i = 0;i<n;i++)
{
cin>>arr[i];
}
while(1)
{
int flag = 0;
for(int i = 0;i<arr.size();i++)
{
if(arr[i]==0)
{
flag = 1;
//如果是最后一个,就向前处理
if(i==arr.size()-1)
{
arr.erase(arr.end() - 2, arr.end());
arr.push_back(1);
brr.push_back(arr.size());
brr.push_back(arr.size()+1);
}
else//统一向后处理
{
arr.erase(arr.begin()+i,arr.begin()+i+2);
arr.insert(arr.begin()+i,1);
brr.push_back(i+1);
brr.push_back(i+2);
}
}
}
if(flag ==0)
{
break;
}
}
int ok = 0;
cout<<brr.size()/2+1<<endl;
for(int i = 0;i<brr.size();i++)
{
ok++;
cout<<brr[i]<<" ";
if(ok%2==0)
cout<<endl;
}
cout<<1<<" "<<arr.size()<<endl;
}
}