• CodeForces1214A


    CodeForces1214A
    说起来你们可能不信,这题硬生生卡了我(1h),我想了背包,扩欧,二分....等等一坨办法.结果最后还是用了(bfs)过的.
    呃,代码一目了然,不用说吧...
    (Code:)

    #include <algorithm>
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <queue>
    #include <cmath>
    #include <ctime>
    #include <map>
    #include <set>
    #define MEM(x,y) memset ( x , y , sizeof ( x ) )
    #define rep(i,a,b) for (int i = a ; i <= b ; ++ i)
    #define per(i,a,b) for (int i = a ; i >= b ; -- i)
    #define pii pair < int , int >
    #define X first
    #define Y second
    #define rint read<int>
    #define pb push_back
     
    using std::set ;
    using std::pair ;
    using std::max ;
    using std::min ;
    using std::priority_queue ;
    using std::vector ;
    using std::swap ;
    using std::sort ;
    using std::unique ;
    using std::greater ;
    using std::queue ;
     
    template < class T >
        inline T read () {
            T x = 0 , f = 1 ; char ch = getchar () ;
            while ( ch < '0' || ch > '9' ) {
                if ( ch == '-' ) f = - 1 ;
                ch = getchar () ;
            }
            while ( ch >= '0' && ch <= '9' ) {
                x = ( x << 3 ) + ( x << 1 ) + ( ch - 48 ) ;
                ch = getchar () ;
           }
       return f * x ;
    }
     
    template < class T >
        inline void write(T x) {
            static T stk[100], top = 0;
            if (x == 0) { putchar('0'); return; }
            if (x < 0) { x = -x; putchar('-'); }
            while (x) { stk[++top] = x % 10; x /= 10; }
            while (top) { putchar(stk[top--] + '0'); }
            putchar ( 10 ) ;
        }
     
    const int N = 1e8 + 100 ;
     
    int dollar , euro , tot ;
    int d[] = { 1 , 2 , 5 , 10 , 20 , 50 , 100 } ;
    int e[] = { 5 , 10 , 20 , 50 , 100 , 200 } ;
    bool mk[N] ; queue < int > q ; 
    
    inline void bfs (int x) {
        q.push ( x ) ; mk[x] = true ;
        while ( ! q.empty () ) {
            int j = q.front () ; q.pop () ;
            rep ( i , 0 , 6 ) {
                int tmp = j - d[i] ;
                if ( tmp >= 0 && ! mk[tmp] ) {
                    mk[tmp] = true ;
                    q.push ( tmp ) ;
                }
            }
            rep ( i , 0 , 5 ) {
                int tmp = j - e[i] ;
                if ( tmp >= 0 && ! mk[tmp] ) {
                    mk[tmp] = true ;
                    q.push ( tmp ) ;
                }
            }
        }
        return ;
    }
    
    signed main (int argc , char * argv[] ) {
        tot = rint () ; dollar = rint () ; euro = rint () ; MEM ( mk , 0 ) ;
        rep ( i , 0 , 6 ) d[i] *= dollar ; rep ( i , 0 , 5 ) e[i] *= euro ;
        bfs ( tot ) ; rep ( i , 0 , tot ) if ( mk[i] ) { write ( i ) ; break ; }
        return 0 ;
    }
    
    May you return with a young heart after years of fighting.
  • 相关阅读:
    洛谷 P1903 【模板】分块/带修改莫队(数颜色)
    BZOJ 2038: [2009国家集训队]小Z的袜子(hose)
    LibreOJ #6208. 树上询问
    LibreOJ #6002. 「网络流 24 题」最小路径覆盖
    hdu 3861 The King’s Problem
    洛谷 P2868 [USACO07DEC]观光奶牛Sightseeing Cows
    洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm
    洛谷 U3348 A2-回文数
    洛谷 P1001 A+B Problem
    LibreOJ #2130. 「NOI2015」软件包管理器
  • 原文地址:https://www.cnblogs.com/Equinox-Flower/p/11469081.html
Copyright © 2020-2023  润新知