zoukankan      html  css  js  c++  java
  • Codeforces 789 B Masha and geometric depression 思维

      题目链接: http://codeforces.com/contest/789/problem/B

      题目描述: 大概是给首项b1和公比q,数列中的数的绝对值不能超过 l,和不好的数的个数 m,不好的数定义为:不是数列中的数,让你求出最后形成的数列最多有多少个(在形成数列的时候,如果出现了不好的数,不能加入数列,继续向下执行

      解题思路: 只需要讨论b1 q 分别为0, 1, -1 的情况就可以, 是一道比较简单的题, 但是我傻逼的没有读明白题, 题目说如果遇到大于l就停止了, 但是我以为不停止, 我还以为自己有那个地方出错了, 然后就一直在调试代码, 在寻找错误, 其实根本没有错误, 就是我的题意理解错了, 赛后看数据还是不明白自己哪里错了, 就是这样自己也不去读题我也是醉了, 自己为什么这么固执啊......  

      代码: 

    #include <iostream>
    #include <cstdio>
    #include <map>
    #include <iterator>
    #include <string>
    #include <algorithm>
    #include <vector>
    #include <cmath>
    #include <cstring>
    using namespace std;
    typedef long long ll;
    map<ll, ll> bad;
    ll b1, q, l, m;
    
    int main() {
        scanf( "%lld%lld%lld%lld", &b1, &q, &l, &m );
        for( ll i = 1; i <= m; i++ ) {
            ll num;
            scanf( "%lld", &num );
            bad[num] = 1;
        }
        if( q == 1 || q == -1 ) {
            if( q == 1 ) {
                if( bad[b1] || abs(b1) > l ) {
                    printf( "0
    " );
                }
                else {
                    printf( "inf
    " );
                    
                }
            }
            else {
                if( (bad[b1] && bad[-b1]) || abs(b1) > l ) {
                    printf( "0
    " );
                }
                else {
                    printf( "inf
    " );
                    
                }
            }
            return 0;
        }
        if( b1 == 0 ) {
            if( bad[b1] ) {
                printf( "0
    " );
            }
            else {
                printf( "inf
    " );
            }
            return 0;
        }
        if( q == 0 ) {
            if( (bad[0]&&bad[b1]) || abs(b1) > l ) {
                printf( "0
    " );
            }
            else if( !bad[b1] && bad[0] ) {
                printf( "1
    " );
            }
            else {
                printf( "inf
    " );
                
            }
            return 0;
        }
        ll t = (ll)b1;
        ll ans = 0;
        while( abs(t) <= (ll)l ) {
            if( !bad[t] ) ans ++;
            t = t * q;
        }
        printf( "%lld
    ", ans );
        return 0;
    }
    View Code

      思考: 马上就区域赛了自己还是这么马虎, 自己这一年的努力白费了? 是白费了吗? 如果不想白费的话可再努力一点, 可以再认真一点可以吗? 谢谢, 别辜负自己.....然后好好学习数学啊, 机器学习的底子就是数学, 自己的视野一定要提升, 要不然真对不起自己每天泡图书馆, 每天回寝室还学, 和每天玩游戏还有什么区别, 专心一点, 认真一点好吗

  • 相关阅读:
    产品逻辑中的—B端技术常识:同步异步接口模式
    高德地图0907
    高德地图出异常
    svn提交报错
    高德地图demo
    JS中一些特殊的方法
    video标签的学习
    document.getElementById('file').files[0]的jquery写法
    layer请求设置遮罩
    easypoi入门<1
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/7622960.html
Copyright © 2011-2022 走看看