zoukankan      html  css  js  c++  java
  • Trades FZU

    This is a very easy problem.

    ACMeow loves GTX1920. Now he has m RMB, but no GTX1920s. In the next n days, the unit price of GTX1920 in the ith day is Ci RMB. In other words, in the ith day, he can buy one GTX1920 with Ci RMB, or sell one GTX1920 to gain Ci RMB. He can buy or sell as many times as he wants in one day, but make sure that he has enough money for buying or enough GTX1920 for selling.

    Now he wants to know, how many RMB can he get after the n days. Could you please help him?

    It’s really easy, yeah?

    Input

    First line contains an integer T(1 ≤ T ≤20), represents there are T test cases.

    For each test case: first line contains two integers n(1 ≤ n ≤2000) and m(0 ≤ m ≤1000000000). Following n integers in one line, the ith integer represents Ci(1 ≤ Ci ≤1000000000).

    Output

    For each test case, output "Case #X: Y" in a line (without quotes), where X is the case number starting from 1, and Y is the maximum number of RMB he can get mod 1000000007.

    Sample Input

    2
    3 1
    1 2 3
    4 1
    1 2 1 2
    

    Sample Output

    Case #1: 3
    Case #2: 4
    答案可以打到10^9000 上大数
    题目大意:给出每天物品的单价和本金,问买卖若干次后资金最多为多少? 
    解题思路:谷底买,山峰卖,用大数。

    被这个大数模板安排了 ans%1e9+7 模的过程会爆int
    然后就一直WA 后面改了板子才过的

      1 #include <cstdio>
      2 #include <cstring>
      3 #include <queue>
      4 #include <cmath>
      5 #include <algorithm>
      6 #include <set>
      7 #include <iostream>
      8 #include <map>
      9 #include <stack>
     10 #include <string>
     11 #include <vector>
     12 #define  pi acos(-1.0)
     13 #define  eps 1e-6
     14 #define  fi first
     15 #define  se second
     16 #define  lson l,m,rt<<1
     17 #define  rson m+1,r,rt<<1|1
     18 #define  bug         printf("******
    ")
     19 #define  mem(a,b)    memset(a,b,sizeof(a))
     20 #define  fuck(x)     cout<<"["<<x<<"]"<<endl
     21 #define  f(a)        a*a
     22 #define  sf(n)       scanf("%d", &n)
     23 #define  sff(a,b)    scanf("%d %d", &a, &b)
     24 #define  sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
     25 #define  sffff(a,b,c,d) scanf("%d %d %d %d", &a, &b, &c, &d)
     26 #define  pf          printf
     27 #define  FRE(i,a,b)  for(i = a; i <= b; i++)
     28 #define  FREE(i,a,b) for(i = a; i >= b; i--)
     29 #define  FRL(i,a,b)  for(i = a; i < b; i++)
     30 #define  FRLL(i,a,b) for(i = a; i > b; i--)
     31 #define  FIN         freopen("DATA.txt","r",stdin)
     32 #define  gcd(a,b)    __gcd(a,b)
     33 #define  lowbit(x)   x&-x
     34 #pragma  comment (linker,"/STACK:102400000,102400000")
     35 using namespace std;
     36 typedef long long  LL;
     37 const int INF = 0x7fffffff;
     38 const int mod = 1e9 + 7;
     39 const int maxn = 1e5 + 10;
     40 const int MAXL = 2500;
     41 const int MAXN = 9999;
     42 const int DLEN = 4;
     43 class Big {
     44 public:
     45     int a[MAXL], len;
     46     Big(const int b = 0) {
     47         int c, d = b;
     48         len = 0;
     49         memset(a, 0, sizeof(a));
     50         while(d > MAXN) {
     51             c = d - (d / (MAXN + 1)) * (MAXN + 1);
     52             d = d / (MAXN + 1);
     53             a[len++] = c;
     54         }
     55         a[len++] = d;
     56     }
     57     Big(const char *s) {
     58         int t, k, index, L;
     59         memset(a, 0, sizeof(a));
     60         L = strlen(s);
     61         len = L / DLEN;
     62         if(L % DLEN) len++;
     63         index = 0;
     64         for(int i = L - 1; i >= 0; i -= DLEN) {
     65             t = 0;
     66             k = i - DLEN + 1;
     67             if(k < 0) k = 0;
     68             for(int j = k; j <= i; j++) t = t * 10 + s[j] - '0';
     69             a[index++] = t;
     70         }
     71     }
     72     Big operator/(const LL &b)const {
     73         Big ret;
     74         LL down = 0;
     75         for(int i = len - 1; i >= 0; i--) {
     76             ret.a[i] = (a[i] + down * (MAXN + 1)) / b;
     77             down = a[i] + down * (MAXN + 1) - ret.a[i] * b;
     78         }
     79         ret.len = len;
     80         while(ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--;
     81         return ret;
     82     }
     83     bool operator>(const Big &T)const {
     84         int ln;
     85         if(len > T.len) return true;
     86         else if(len == T.len) {
     87             ln = len - 1;
     88             while(a[ln] == T.a[ln] && ln >= 0) ln--;
     89             if(ln >= 0 && a[ln] > T.a[ln]) return true;
     90             else return false;
     91         } else return false;
     92     }
     93     Big operator+(const Big &T)const {
     94         Big t(*this);
     95         int big = T.len > len ? T.len : len;
     96         for(int i = 0; i < big; i++) {
     97             t.a[i] += T.a[i];
     98             if(t.a[i] > MAXN) {
     99                 t.a[i + 1]++;
    100                 t.a[i] -= MAXN + 1;
    101             }
    102         }
    103         if(t.a[big] != 0) t.len = big + 1;
    104         else t.len = big;
    105         return t;
    106     }
    107     Big operator-(const Big &T)const {
    108         int big;
    109         bool flag;
    110         Big t1, t2;
    111         if(*this > T) {
    112             t1 = *this;
    113             t2 = T;
    114             flag = 0;
    115         } else {
    116             t1 = T;
    117             t2 = *this;
    118             flag = 1;
    119         }
    120         big = t1.len;
    121         for(int i = 0; i < big; i++) {
    122             if(t1.a[i] < t2.a[i]) {
    123                 int j = i + 1;
    124                 while(t1.a[j] == 0) j++;
    125                 t1.a[j--]--;
    126                 while(j > i) t1.a[j--] += MAXN;
    127                 t1.a[i] += MAXN + 1 - t2.a[i];
    128             } else t1.a[i] -= t2.a[i];
    129         }
    130         t1.len = big;
    131         while(t1.a[t1.len - 1] == 0 && t1.len > 1) {
    132             t1.len--;
    133             big--;
    134         }
    135         if(flag) t1.a[big - 1] = 0 - t1.a[big - 1];
    136         return t1;
    137     }
    138     LL operator%(const int &b)const {
    139         LL d = 0;
    140         for(int i = len - 1; i >= 0; i--) d = ((d * (MAXN + 1)) % b + a[i]) % b;
    141         return d;
    142     }
    143     Big operator*(const Big &T) const {
    144         Big ret;
    145         int i, j, up, temp, temp1;
    146         for(i = 0; i < len; i++) {
    147             up = 0;
    148             for(j = 0; j < T.len; j++) {
    149                 temp = a[i] * T.a[j] + ret.a[i + j] + up;
    150                 if(temp > MAXN) {
    151                     temp1 = temp - temp / (MAXN + 1) * (MAXN + 1);
    152                     up = temp / (MAXN + 1);
    153                     ret.a[i + j] = temp1;
    154                 } else {
    155                     up = 0;
    156                     ret.a[i + j] = temp;
    157                 }
    158             }
    159             if(up != 0)  ret.a[i + j] = up;
    160         }
    161         ret.len = i + j;
    162         while(ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--;
    163         return ret;
    164     }
    165     void print() {
    166         printf("%d", a[len - 1]);
    167         for(int i = len - 2; i >= 0; i--) printf("%04d", a[i]);
    168     }
    169 };
    170 int t, n, m, a[maxn], f[maxn];
    171 int main() {
    172     int cas = 1;
    173     sf(t);
    174     while(t--) {
    175         scanf("%d%d", &n, &m);
    176         Big ans = m, temp;
    177         for (int i = 1 ; i <= n ; i++) sf(a[i]);
    178         int i = 1, j, k;
    179         while(i <= n) {
    180             for (j = i ; j + 1 <= n ; j++) if (a[j + 1] > a[j]) break;
    181             if (j == n) break;
    182             for (k = j + 1 ; k + 1 <= n ; k++) if (a[k + 1] < a[k]) break;
    183             i = k + 1;
    184             temp = ans / a[j];
    185             ans = ans + temp * (a[k] - a[j]);
    186         }
    187         LL ans1 = ans % mod;
    188         printf("Case #%d: %lld
    ", cas++, ans1);
    189     }
    190     return 0;
    191 }



  • 相关阅读:
    Java IO流
    博客园禁止pc端以及手机端选中复制粘贴
    eclipse debug模式出现 source not found
    Winform之跨线程访问控件(在进度条上显示字体)
    WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)
    WPF制作QQ列表(仿qq列表特效)
    WPF柱状图(支持数据库动态更新)之组件的数据动态化
    WPF柱状图(支持数据库动态更新)
    WPF仿微软事件和属性窗体,效果更炫!
    DataGrid缓冲加载数据
  • 原文地址:https://www.cnblogs.com/qldabiaoge/p/9514757.html
Copyright © 2011-2022 走看看