zoukankan      html  css  js  c++  java
  • CF476DDreamoon and Sets【结论】

    正题

    题目链接:https://www.luogu.com.cn/problem/CF476D


    题目大意

    \(n\)个四元组使得

    • 所有四元组内没有重复的数。
    • 四元组内的数字两两之间\(gcd\)都为\(k\)

    要求使得最大的数字最小
    \(1\leq n\leq 10000,1\leq k\leq 100\)


    解题思路

    首先\(k\)是没有用的因为可以视为互质,然后再乘\(k\),然后考虑如何构造。

    考虑每次在原来\(n-1\)个四元组的基础上加入四个数然后重新排列使得合法,首先对于任意\(x\)都有\(x,x+1,x+2\)肯定是互质的,所以一种比较可能正确的方法是把这三个排到一个二元组,然后再考虑剩下那个排啥,显然\(x+4\)不行,那就只能排\(x+5\)了。

    这样一次占用了六个数字,可以证明是最优的做法但是我不会证/kk。

    时间复杂度:\(O(n)\)


    code

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    ll n,k;
    signed main()
    {
    	scanf("%lld%lld",&n,&k);
    	printf("%lld\n",(6ll*n-1)*k);
    	for(ll i=1;i<=n;i++)
    		printf("%lld %lld %lld %lld\n",(6ll*i-5ll)*k,(6ll*i-4ll)*k,(6ll*i-3ll)*k,(6ll*i-1ll)*k);
    	return 0;
    }
    
  • 相关阅读:
    acwing 116. 飞行员兄弟
    leetcode 1041. 困于环中的机器人
    acwing 110 防晒
    acwing 167. 木棒
    AcWing 166. 数独
    solr4.7新建core
    solr4.7新建core
    Solr4.7从文件创建索引
    Solr4.7从文件创建索引
    Solr4.7从文件创建索引
  • 原文地址:https://www.cnblogs.com/QuantAsk/p/15421714.html
Copyright © 2011-2022 走看看