zoukankan      html  css  js  c++  java
  • SDNU_ACM_ICPC_2021_Winter_Practice_4th [个人赛]

    传送门

    D - Odd Divisor

    题意:

    给你一个n,问你n是否至少有一个奇数因子(这里题意没说清,没说是不是只有一个还是可以有多个!AC以后才发现是不止一个

    思路:

    如果这个数没有奇数因子,那它肯定是2^k

    1.所以我就开始用循环除2,看看最后是不是奇数,1除外,因为2的k次方除到最后就剩下1,所以得特判。但是这个做法感觉还是不够妙

    再两个妙的做法:

    2.因为2^k是指数函数,而与指数函数互为反函数的对数函数,所以我们可以用对数函数来判断是不是2的k次方

    if((int)log2(n) == log2(n))
        cout<<"NO
    ";
    else
        cout<<"YES
    ";
    

    3.因为是2的k次方,所以对于他的二进制来说,除了首位是1,其他位应该是0,所以可以利用n&(n - 1)来判断。如果是2的幂次,那么n-1的二进制应该是全是1,这与n是刚好相反的,所以取并,得到的肯定是0.

    if(n & (n - 1))
        cout<<"YES
    ";
    else
        cout<<"NO
    ";
    

    下面是第一种做法的AC码

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n, k, m;
    int main()
    {
        cin>>n;
        while(n--)
        {
            scanf("%lld",&m);
            //cout<<m<<endl;
            while(m)
            {
                if(m % 2 == 0)
                    m /= 2;
                else
                    break;
            }
            //cout<<m<<endl;
            if(m % 2 == 1 && m != 1)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
        return 0;
    }
    

    E - New Year's Number

    题意:

    给你一个数,让你判断是不是由2020或2021组成的

    思路:

    因为2020与2021相差不大,2021可以看出2020 + 1,所以我们可以对2020取余,得到余数a,再用那个数除以2020,得到商b,只需要比较b是否大于等于a即可。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n, k, m, ans;
    int main()
    {
        cin>>n;
        while(n--)
        {
            cin>>m;
            k = m % 2020;
            ans = m / 2020;
            if(ans >= k)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
        return 0;
    }
    
    
    

    K - 取石子游戏

    题意:

    给你两堆石子,有两种取法,一是从任意一堆中取任意数量的石子,或者是同时对两堆取相同数量的石子,最后取完的人胜,你先手,如果最后是你赢就输出1,否则输出0

    思路:

    得先找到必败点,也就是奇异局势

    (0,0)(1,2)(3,5)(4,7)……

    这些都是必败点,可以发现数之间的差值是成等差数列的,而且所有的自然数都包含在所有的必败点上。

    剩下的就是找规律了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ni1Q3g24-1611845112193)(C:UsersAdministratorAppDataRoamingTypora ypora-user-imagesimage-20210126205904000.png)]

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll a,b;
    int main()
    {
        while(cin>>a>>b)
        {
            if(a > b)
                swap(a, b);
            if((int)((b - a) * (sqrt(5.0) + 1.0) / 2.0) == a)
                cout<<0<<endl;
            else
                cout<<1<<endl;
        }
        return 0;
    }
    

    a) * (sqrt(5.0) + 1.0) / 2.0) == a)
    cout<<0<<endl;
    else
    cout<<1<<endl;
    }
    return 0;
    }

    不是所有的牛奶都叫特仑苏,也不是所有的人都叫猪猪
  • 相关阅读:
    为什么每天都在学习,生活还是没有任何改善?
    MySql基础汇总
    BeanUtils.copyProperties(待复制对象, 待更新对象) || PropertyUtils.copyProperties(待更新对象, 待复制对象)
    ThreadLocal
    synchronized 锁
    STS报could not find tools.jar in the active JRE
    SpringBoot 定时任务 || cron表达式
    lombok注解
    cron表达式
    Thymeleaf 模板引擎
  • 原文地址:https://www.cnblogs.com/chelsea0901/p/14342434.html
Copyright © 2011-2022 走看看