Codeforces Round #720 (Div. 2) B. Nastia and a Good Array
作者:
Hoppz
,
2021-11-21 22:47:40
,
所有人可见
,
阅读 256
题意
定义一个好数组为,所有的a[i-1]与a[i]互质,
然后我们可以做的操作是,选择一对 i,j ,
再随便选一对 x,y ,满足 min(x,y) = min(ai,aj) ,
那么就可以把 ai 变成 x , aj 变成 y。(我可能没说清楚,读下题嘛)
思路
直接找到最小值,
把前面的所有都变成 mi+1,mi+2...
把后面的都变成 mi+1,mi+2...
比如 4 10 1 3 4 ,我们就把他变成 3 2 1 2 3
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int vec[N+10];
tuple<int,int,int,int> tup[N];
void solve()
{
int n;
cin >> n;
int loc = 0,mi = 0x3f3f3f3f;
for(int i = 0; i < n ; i++){
cin >> vec[i];
if( vec[i] < mi ){
loc = i; mi = vec[i];
}
}
cout << n-1 << endl;
for(int i = loc + 1 ; i < n ; i++){
cout << i+1 << ' ' << loc + 1 << ' ' << mi + i - loc << ' ' << mi << endl;
}
int cnt = 1;
for(int i = loc - 1; i >= 0 ; i--){
cout << i+1 << ' ' << loc + 1 << ' ' << (mi + cnt++) << ' ' << mi << endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--){
solve();
}
return 0;
}