• 2019.6.28 校内测试 T2 【音乐会】二重变革


    看到这个题之后,一个很暴力很直接的想法就是贴上题目中的代码然后交上去走人,但是很显然这是会TLE+MLE的,想想谁会这么傻把主要代码给你QwQ~;

    其实这段代码是想告诉你一件事:用序列中的大数减去小数,直到序列中所有的数一样为止!

    这就意味着最后的答案一定是某个数乘以 n!

    证明:

    n=2的情况

    想一想n=2的情况。这时这段代码的任务就是:用两个数中较大的数减去较小的数,一直到两数相等为止。
    这不就是更相减损术吗!

    代码如下:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int read()
    {
        char ch=getchar();
        int a=0,x=1;
        while(ch<'0'||ch>'9')
        {
            if(ch=='-') x=-x;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
            a=(a<<1)+(a<<3)+(ch-'0');
            ch=getchar();
        }
        return a*x;
    }
    int gcd(int a,int b)           //扩展欧几里得求最大公约数 
    {
        if(b==0) return a;
        else return gcd(b,a%b);
    }
    int n,gcdd,a;
    int main()
    {
        n=read();
        gcdd=read();               //先使第一个数为gcdd 
        for(int i=2;i<=n;i++) 
        {
            a=read();
            if(gcdd==1) continue;  //若前几个数的最大公约数已经是1了,再求下去肯定还是一,那就不用求了 
            gcdd=gcd(gcdd,a);      //否则就一直求 
        }
        printf("%d",gcdd*n);
        return 0; 
        
    }
  • 相关阅读:
    1.配置pytorch环境
    排序算法总结
    树的存储
    递归回溯法求N皇后问题
    输出分割的字符串
    文件的操作
    Okhttp进行文件的下载
    Android客户端OkHttp的使用以及tomcat服务器的解析客户端发过来的数据
    java集合框架
    spring mvc框架入门
  • 原文地址:https://www.cnblogs.com/xcg123/p/11105642.html
Copyright © 2020-2023  润新知