zoukankan      html  css  js  c++  java
  • HDU-6501 Problem B. Memory Banks

     1 #include <bits/stdc++.h>
     2 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
     3 const int maxn = 100000 + 10;
     4 const int mod=1000000007;
     5 using namespace std;
     6 typedef long long ll;
     7 
     8 ll station[maxn];
     9 ll qa(ll a,ll b)
    10 {
    11     ll ans=0;
    12     while(b)
    13     {
    14         if(b&1)ans=(ans+a)%mod;
    15         a=(a+a)%mod;
    16         b>>=1;
    17     }
    18     return ans;
    19 }
    20 int main()
    21 {
    22     ll liusi[70];
    23     while(~scanf("%lld",&liusi[0]))
    24     {
    25         _for(i,1,60)
    26             scanf("%lld",&liusi[i]);
    27         
    28         int n;
    29         scanf("%d",&n);
    30         _for(i,0,n)
    31         scanf("%lld",&station[i]);
    32 
    33         sort(station,station+n,greater<ll>());
    34         int flag = 0;
    35         for(int i = 0;i < n;i ++)
    36         {
    37             int j;
    38             for(j = 59;j >= 0;j --)
    39             {
    40                 if(!liusi[j])
    41                     continue;
    42                 ll a = ((ll)1<<j);
    43                 if(a>station[i])
    44                     continue;
    45                 
    46                 ll b = station[i]/a;
    47                 if(b>=liusi[j])
    48                 {
    49                     station[i] -= liusi[j]*a;
    50                     liusi[j] = 0;
    51                 }
    52                 else
    53                 {
    54                     station[i] -= b*a;
    55                     liusi[j] -= b;
    56                 }
    57             }
    58             if(station[i])
    59             {
    60                 flag = 1;
    61                 break;
    62             }
    63         }
    64         if(flag)
    65         {
    66             printf("-1
    ");
    67             continue;
    68         }
    69         
    70         ll rnt = 0;
    71         for(int i = 59; i >= 0; i --)
    72         {
    73             if(liusi[i])
    74                 rnt = (rnt + qa(liusi[i],1LL<<i)) % mod;
    75         }
    76         printf("%lld
    ",rnt);
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    序言vue.js介绍
    python中end=''
    python文件的操作
    python异常
    python异常(理论知识)
    Uva 11300 Spreading the Wealth 中位数
    反转(开关问题) poj3276
    NEKO's Maze Game 思维
    Aaronson 一道思维题
    我开博客了
  • 原文地址:https://www.cnblogs.com/Asurudo/p/10743767.html
Copyright © 2011-2022 走看看