zoukankan      html  css  js  c++  java
  • 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; 
        
    }
  • 相关阅读:
    python socket 网络编程
    Python中的MySQL接口:PyMySQL & MySQLdb
    Docker Day1 & 2
    Java数据结构与算法(5):AVL树
    Solr集群环境搭建
    Java数据结构与算法(4):二叉查找树
    Solr单机环境搭建及部署
    Java数据结构与算法(3):队列
    Java数据结构与算法(2):栈
    Java数据结构与算法(1):线性表
  • 原文地址:https://www.cnblogs.com/xcg123/p/11105642.html
Copyright © 2011-2022 走看看