B. Nastia and a Good Array
题目传送门:
题面:
题目大意:
意思是叫你选定
a
i
,
a
j
a_i,a_j
ai,aj且与数字
x
,
y
x,y
x,y调换,要求
m
i
n
(
a
i
,
a
j
)
=
=
m
i
n
(
x
,
y
)
min(a_i,a_j)==min(x,y)
min(ai,aj)==min(x,y)
最后结果要数列相邻元素互质。
输出一组方案。
思路:
k
≤
n
k≤n
k≤n所以换的次数肯定是充裕的。
选择数组中最小的元素,然后把其他元素和他一起打包用
(
x
,
m
i
n
n
)
(x,minn)
(x,minn)换掉其实就是随意的把其他元素变成一个比
m
i
n
n
minn
minn大的而已。
要求互质,那就
m
i
n
n
+
1
,
m
i
n
n
,
m
i
n
n
+
1
,
m
i
n
n
.
.
.
.
minn+1,minn,minn+1,minn....
minn+1,minn,minn+1,minn....
计划通!
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 114514;
ll a[maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--) {
int pos=-1;
int n;
cin >> n;
ll minn = 0x3f3f3f3f;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if( minn > a[i]) {
minn=a[i];
pos=i;
}
}
// cout<<"pos:"<<pos<<endl;
printf("%d\n",n-1);
for(int i=1;i<=n;i++){
if(i==pos) continue;
if(abs(i-pos)&1) printf("%d %d %lld %lld\n",i,pos,minn+1,minn);
else {
printf("%d %d %lld %lld\n",i,pos,minn,minn);
}
}
}
}