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;
}
posted @ 2025-02-11 17:58  sjgigj  阅读(27)  评论(0)    收藏  举报