zoukankan      html  css  js  c++  java
  • UVALive

    题意很长。。。总的来说就是这样的。假设刚开始两个容器分别放的不明物体分别有f[0],f[1]。那么经过一次操作就是就变成f[2]=f[1]+f[0],f[1]。。
    然后让你求经过M次之后f[m+1]和f[m]的gcd。。中途执行到N次的时候要f[n+1]要家Y.
    做题的时候自己简直是个SB。每天做题都是个SB。。
    可以看出操作过程其实就是一个斐波那契。然后相邻的那个斐波那契数gcd是1。然后M-N之后的操作的gcd都是一样的。其实N之前都gcd都是x。然后就是在N的时候加了一个Y。然后gcd就有了变化。所以我们预处理斐波那契到72就可以

    
    
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #include<map>
    #include<set>
    #include<vector>
    typedef long long ll; 
    using namespace std;
    const int N=100000+9;
    ll f[N]; 
    ll gcd(ll a,ll b)
    {
        return b==0?a:gcd(b,a%b);
    } 
    int main()
    {
        int t;
        ll x,n,y,m;
        scanf("%d",&t);
        int cas=0;
        f[0]=1;
        f[1]=1;
        for(int i=2;i<74;i++)
        {
            f[i]=f[i-1]+f[i-2]; 
        } 
        while(t--)
        {
            cin>>x>>n>>y>>m;
             ll N,M;
             if(n==0&&m==0)
             {
                N=x+y;
                M=x+y;
             }
             else
             {
                N=f[n+1]*x+y;
                M=f[n]*x+y;
             }
             ll ans=gcd(N,M);
             printf("Case %d: %lld
    ",++cas,ans);
             }
            return 0; 
    }
  • 相关阅读:
    web页面静态化与伪静态化
    mysql 优化之空间换时间
    QPS、PV、UV、RT 之间的关系
    接口
    MySQL 索引
    名词解释
    go 语言标识符
    Git版本控制与工作流
    Maven安装与配置
    IDEA工具使用说明
  • 原文地址:https://www.cnblogs.com/NaCl/p/9580109.html
Copyright © 2011-2022 走看看