zoukankan      html  css  js  c++  java
  • 【6.28校内test】T2 【音乐会】二重变革

    【音乐会】二重变革【题目链接】

    T2其实是一道数学题,因为你看:

    2MB??一共就可以存下个int,然鹅再看数据范围:

    那么大是稳稳的不是TLE就是MLE了,所以肯定是数学题,而且是只需要存很少数据的数学题。所以我们也不知道该怎么办了,然后lz日常开始考场上的打表找规律:

    样例#1:  样例#2:但是现在看并没有什么规律可言,然后我们在自己搞几个数据试试:

    我们发现,x在减完后最后都会变成一样的数,这个数有什么规律呢?定睛一看,其实是输入的所有x的最大公约数!

    偷走wz证明:

    所以我们就可以大胆猜想了:求出x1~xn的最大公约数,然后*n就是答案(当然确实是这样的),求最大公约数,可以用gcd来求:

    int gcd(int a,int b){
        if(b==0) return a;
        return gcd(b,a%b);
    }

    然后我们也不必把所有的x都存下来,只需要记录一个x,以及当前所有输入了的x的最大公约数gcdd就可以啦(然后悄咪咪的小优化:当gcdd=1时就可以不用往下求了,不过好像并快不了几毫秒)

    CODE:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    inline int read(){
        int ans=0;
        char last,ch=getchar();
        while(ch<'0'||ch>'9') last=ch,ch=getchar();
        while(ch>='0'&&ch<='9') ans=(ans<<3)+(ans<<1)+ch-'0',ch=getchar();
        if(last=='-') ans=-ans;
        return ans;
    }
    
    int n,x,gcdd;
    long long ans;
    
    int gcd(int a,int b){
        if(b==0) return a;
        return gcd(b,a%b);
    }
    
    int main(){
        n=read();
        for(int i=1;i<=n;i++){
            x=read();
            gcdd=gcd(gcdd,x);
            if(gcdd==1) break;
        }
        ans=gcdd*n;
        printf("%lld",ans);
        return 0;
    }

    end-

  • 相关阅读:
    13、SpringBoot开启DevTools
    11、SpringBoot整合Junit
    10、SpringBoot之异常处理
    9、SpringBoot整合Mybatis
    8、SpringBoot整合JDBC
    7、SpringBoot整合Thymeleaf
    6、SpringBoot整合Freemarker
    5、SpringBoot整合JSP
    4、SpringBoot之文件上传
    leetcode787.K站中转最便宜航班
  • 原文地址:https://www.cnblogs.com/zhuier-xquan/p/11102826.html
Copyright © 2011-2022 走看看