Dreamoon and Sets
题目链接
题意:
输入n,k,输出n个四元组。
满足以下条件
对于任意一个四元组,其中任意两个不同数的最大公约数是k
每个数仅在所有的四元组内出现一次
要求n个四元组内最大的数最小
思路:
四个数两两的最大公约数为k,说明这四个数同时除以k之后两两互质,接下来找四个两两互质的数。
从1-6n,每六个数输出一组互质四元组(6i+1,6i+2,6i+3,6i+5),这四个数一定两两互质,从样例二可以看出一定最优,至于为什么最优,你会发现一个满足互质的四元组中最多只能一个偶数,当四个数全部是奇数时肯定不如我们现在的情况好,显然我们更优。具体实现参照代码。
点击查看代码
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
// #define int long long
#define ll long long
const int N = 2e5+5;
struct L{
int a,b,c,d;
L(){}
L(int _a,int _b,int _c,int _d){
a=_a,b=_b,c=_c,d=_d;
}
};
vector<L>v;
void solve(){
int n,k;
cin>>n>>k;
int zuida=-1;
for(int i=0;i<n;++i){
v.push_back(L(i*6+1,i*6+2,i*6+3,i*6+5));
zuida=max(i*6+5,zuida);
}
cout<<zuida*k<<endl;
for(int i=0;i<n;++i){
cout<<v[i].a*k<<" "<<v[i].b*k<<" "<<v[i].c*k<<" "<< v[i].d*k<<endl;
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _=1;
// cin>>_;
while(_--)
solve();
return 0;
}

浙公网安备 33010602011771号