题解:CF1635C Differential Sorting
xiaokang_suancai · · 题解
CF1635C 题解
题目传送门
题目大意
给定长为
思路分析
首先是不需要执行任何操作的情况。显然,当
参考代码
#include<bits/stdc++.h>
using namespace std;
int a[200005],t,n;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
a[0]=-0x3fffffff; // 这里是为了防止在判定非降序时数组边界的随机数导致误判
bool flag=true;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
{
if(a[i]<a[i-1])
{
flag=false; // 如果判定到有降序就直接跳过
break;
}
}
if(flag)
{
cout<<0<<endl;
continue;
} // 在非降序的情况下直接输出 0
if(a[n-1]>a[n])
{
cout<<-1<<endl;
continue;
}
if(a[n-1]-a[n]>a[n-1])
{
cout<<-1<<endl;
continue;
} // 判断无解的情况,上面已经讲了
else
{
cout<<n-2<<endl;
for(int i=1;i<=n-2;i++)
cout<<i<<" "<<n-1<<" "<<n<<endl;
} // 套用推导出来的公式
}
return 0;
}