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;}
}