zoukankan      html  css  js  c++  java
  • Codeforces Round #272 (Div. 2) D. Dreamoon and Sets (思维 数学 规律)

    题目链接

    题意:

    1-m中,四个数凑成一组,满足任意2个数的gcd=k,求一个最小的m使得凑成n组解。并输出

    分析: 直接粘一下两个很有意思的分析。。

    分析1:

    那我们就弄成每组数字都互质,然后全体乘以k不就行了么……

    然后看了看样例……

    这个该怎么说……我是觉得额这道题的output暴露了数据规律怎么破……我算是看出规律再证明的方式A的这道题

    当时我看到22那个样例的时候……在想他干嘛要把22放这里……然后发现 2/4/6/10 14/16/18/22也是行的哇……

    化成乘以k之前的数据…… 1/2/3/5和7/8/9/11……我就试了试——每组公差都是6?……然后就A了……

    分析2:

    本题的目标是选择4n个数填入到n行,每行四个数,要求是使得每行中的四个数两两的最大公约数等于K。问怎样选择使得选择的最大的数字最小,并且要求输出这个最大的数以及每一行所填的数字。
    那么我们转化一下,将所有的数除以K。问题即转化成使得每行四个数两两互质。
    易知,每一行最多一个偶数,因为偶数之间不互质。
    现在我们假设每一行都有一个偶数,那么至少我们需要选择3n个奇数,假设我们选择最小的3n个奇数,那么最大的数即6n-1(我们假设偶数不会大于最大的奇数,事实上最大的数一定是奇数,接下来我们会给出证明),每少一个偶数,则最大的数的大小便增加2。
    好了,现在我们假设只用最小的3n个奇数以及n个均不大于6n-1的偶数可以满足题目要求!
    那么,第一行的答案就是6n-1。
    接下来n行我们以下面的形式构造:
    1 2 3 5
    7 8 9 11
    ……
    6i-5 6i-4 6i-3 6i-1
    ……
    6n-5 6n-4 6n-3 6n-1

    这样便得到了最终的答案。
    以这样的构造方法交上去便可AC。

    但是我们能否证明呢?显然是可以的。
    对于其中的某一行我们有i i+1 i+2 i+4(i为6x-5,其中x为正整数,同时我们可以知道i为正整数且i为奇数)。
    由于i,i+1,i+2两两互质。
    i和i+2不互质当且仅当i,i+2为偶数,但由上面的定义我们可知i必定为奇数,所以i,i+1,i+2两两互质。
    同理i+2,i+4也互质。
    所以我们只需要i,i+4互质且i+1,i+4互质即可。
    因为i与i+4不互质当且仅当i为4的倍数,i+1与i+4不互质当且仅当i+1为3的倍数。
    因为i为奇数,所以i必定与i+4互质。
    因为i+1 = 6x-4 = 2*(3x-2),不是3的倍数,所以i+1与i+4互质。
    因此,这样的构造是可行且最小的。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cstdlib>
     5 #include <queue>
     6 #include <cmath>
     7 #include <algorithm>
     8 #define LL __int64
     9 const int maxn = 100+10;
    10 using namespace std;
    11 int n, k;
    12 
    13 int main()
    14 {
    15     int i;
    16     while(~scanf("%d%d", &n, &k))
    17     {
    18        cout<<k*(6*n-1)<<endl;
    19        for(i = 1; i < 6*n; i += 6 )
    20        {
    21            printf("%d %d %d %d
    ", k*i, k*(i+1), k*(i+2), k*(i+4));
    22        }
    23     }
    24     return 0;
    25 }
  • 相关阅读:
    nohub
    swoole聊天室
    swoole httpserver学习
    swore tcp服务学习
    ps查看命令
    nginx和php-fpm调用方式
    Unix/Linux环境C编程入门教程(1) Solaris 11 64bit环境搭建
    Unix/Linux环境C编程入门教程(1) Solaris 11 64bit环境搭建
    C语言入门(4)——常量、变量与赋值
    C语言入门(3)——对Hello World程序的解释
  • 原文地址:https://www.cnblogs.com/bfshm/p/4046885.html
Copyright © 2011-2022 走看看