NOIpDay1T2 国王游戏 高精度+贪心

 

很强的高精   唐神的板子好用又好看   %Candy?

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 
  6 using namespace std;
  7 
  8 const int B = 10000;
  9 
 10 struct Big{
 11     int n,a[1010];
 12     int& operator [](int x){return a[x];}
 13     Big():n(1){memset(a,0,sizeof(a));}
 14     void ini(int x){a[1] = x;n = 1;}
 15 };
 16 
 17 Big operator *(Big a,int b){
 18     int g = 0;
 19     for(int i = 1;i <= a.n;i++)
 20         g += a[i]*b,a[i] = g%B,g /= B;
 21     while(g)a[++a.n] = g%B,g /= B;
 22     return a;
 23 }
 24 
 25 Big operator *(Big a,Big b){
 26     Big c;
 27     for(int i = 1;i <= a.n;i++){
 28         int g = 0;
 29         for(int j = 1;j <= b.n;j++)
 30             g += c[i+j-1]+a[i]*b[j],c[i+j-1] = g%B,g /= B;
 31         c[i+b.n] = g;
 32     }
 33     c.n = a.n+b.n;
 34     while(c.n > 1&&c[c.n] == 0)c.n--;
 35     return c;
 36 }
 37 
 38 Big operator +(Big a,Big b){
 39     int g = 0,n = max(a.n,b.n);
 40     for(int i = 1;i <= n;i++){
 41         g += i<=a.n? a[i]:0;
 42         g += i<=b.n? b[i]:0;
 43         a[i] = g%B,g /= B;
 44     }
 45     a.n = n;
 46     if(g)a[++a.n] = g;
 47     return a;
 48 }
 49 
 50 Big operator -(Big a,Big b){
 51     for(int i = 1;i <= b.n;i--){
 52         if(a[i] < b[i])a[i+1]--,a[i] += B;
 53         a[i] -= b[i];
 54     }
 55     int p = b.n+1;
 56     while(a[p] < 0)a[p] += B,a[++p]--;
 57     while(a.n > 1&&a[a.n] == 0)a.n--;
 58     return a;
 59 }
 60 
 61 void print(Big a){
 62     printf("%d",a[a.n]);
 63     for(int i = a.n-1;i >= 1;i--)printf("%04d",a[i]);
 64 }
 65 
 66 bool operator <(Big a,Big b){
 67     if(a.n^b.n)return a.n < b.n;
 68     for(int i = a.n;i >= 1;i--)if(a[i]^b[i])return a[i] < b[i];
 69     return false;
 70 }
 71 
 72 Big operator /(Big a,int b){
 73     Big c; int r = 0;
 74     for(int i = a.n;i > 0;i--)
 75         a[i] += r*B,r = a[i]%b,a[i] /= b;
 76     while(a[a.n] == 0&&a.n > 1)a.n--;
 77     return a;
 78 }
 79 
 80 struct node{
 81     int l,r;
 82     bool operator <(const node& x)const{
 83         return l*r < x.l*x.r;
 84     }
 85 }prs[10010];
 86 
 87 Big sum,ans,cur;
 88 int n,m;
 89 
 90 int main(){
 91     cin >> n;
 92     for(int i = 0;i <= n;i++)cin >> prs[i].l >> prs[i].r;
 93     sort(prs+1,prs+n+1);
 94     sum.ini(prs[0].l);
 95     for(int i = 1;i <= n;i++){
 96         ans = max(ans,sum/prs[i].r);
 97         sum = sum*prs[i].l;
 98     }
 99     print(ans);
100 return 0;
101 }
View Code

 

posted @ 2019-10-12 21:39  TIH_HIT  阅读(165)  评论(0编辑  收藏  举报