模板
/*高精板子*/
struct bign{
int len,s[30010];
bign(){
memset(s,0,sizeof(s));
len=1;
}
bign(int num){*this=num;}
bign(const char *num){*this=num;}
bign operator = (const int num){
char s[30010];
sprintf(s,"%d",num);
*this=s;
return *this;
}
void clean(){
while(len>1&&!s[len-1]) len--;
}
bign operator = (const char *num){
memset(s,0,sizeof(s));
len=strlen(num);
for(int i=0;i<len;i++){
if(isdigit(num[len-i-1])) s[i]=num[len-i-1]-'0';
else s[i]=num[len-i-1]-'A'+10;
}
clean();
return *this;
}
bign operator + (const bign &b) const{
bign c;
c.len=max(len,b.len);
for(int i=0;i<=c.len;i++){
c.s[i]+=s[i]+b.s[i];
c.s[i+1]+=c.s[i]/10;
c.s[i]%=10;
}
if(c.s[c.len]) c.len++;
c.clean();
return c;
}
bign operator += (const bign &b){
*this=*this+b;
return *this;
}
bign operator * (const bign &b){
bign c;
c.len=len+b.len;
for(int i=0;i<len;i++){
for(int j=0;j<b.len;j++){
c.s[i+j]+=s[i]*b.s[j];
}
}
for(int i=0;i<c.len;i++){
c.s[i+1]+=c.s[i]/10;
c.s[i]%=10;
}
c.clean();
return c;
}
bign operator *= (const bign &b){
*this =*this*b;
return *this;
}
bign operator - (const bign &b){
bign c;
c.len=0;
for(int i=0,g=0;i<len;i++){
int x=s[i]-g;
if(i<b.len) x-=b.s[i];
if(x>=0) g=0;
else{g=1; x+=10;}
c.s[c.len++]=x;
}
c.clean();
return c;
}
bign operator -= (const bign &b){
*this=*this-b;
return *this;
}
bign operator / (const int &b){
int f=0;
bign c;
for(int i=len-1;i>=0;i--){
f=f*10+s[i];
c.s[i]=f/b;
f%=b;
}
c.len=len;
c.clean();
return c;
}
bign operator / (const bign &b){
bign c,f=0;
for(int i=len-1;i>=0;i--){
f=f*10;
f.s[0]=s[i];
while(f>b||f==b){
f-=b;
c.s[i]++;
}
}
c.len=len;
c.clean();
return c;
}
bign operator /= (const bign &b){
*this=*this/b;
return *this;
}
bign operator % (const bign &b){
bign r=*this/b;
r=*this-r*b;
return r;
}
bign operator %= (const bign &b){
*this=*this%b;
return *this;
}
bool operator < (const bign &b){
if(len!=b.len) return len<b.len;
for(int i=len-1;i>=0;i--){
if(s[i]!=b.s[i]) return s[i]<b.s[i];
}
return false;
}
bool operator > (const bign &b){
if(len!=b.len) return len>b.len;
for(int i=len-1;i>=0;i--){
if(s[i]!=b.s[i]) return s[i]>b.s[i];
}
return false;
}
bool operator == (const bign &b){
return !(*this>b)&&!(*this<b);
}
string str() const{
string res="";
for(int =0;i<len;i++){
if(s[i]<10) res=char(s[i]+'0')+res;
else res=char(s[i]+'A'-10)+res;
}
return res;
}
}a,b,c;
例题
题目 不附例题我自己可能都不知道该怎么用
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define maxn 1010
using namespace std;
/*高精板子*/
struct bign{
int len,s[30010];
bign(){
memset(s,0,sizeof(s));
len=1;
}
bign(int num){*this=num;}
bign(const char *num){*this=num;}
bign operator = (const int num){
char s[30010];
sprintf(s,"%d",num);
*this=s;
return *this;
}
void clean(){
while(len>1&&!s[len-1]) len--;
}
bign operator = (const char *num){
memset(s,0,sizeof(s));
len=strlen(num);
for(int i=0;i<len;i++){
if(isdigit(num[len-i-1])) s[i]=num[len-i-1]-'0';
else s[i]=num[len-i-1]-'A'+10;
}
clean();
return *this;
}
bign operator + (const bign &b) const{
bign c;
c.len=max(len,b.len);
for(int i=0;i<=c.len;i++){
c.s[i]+=s[i]+b.s[i];
c.s[i+1]+=c.s[i]/10;
c.s[i]%=10;
}
if(c.s[c.len]) c.len++;
c.clean();
return c;
}
bign operator += (const bign &b){
*this=*this+b;
return *this;
}
bign operator * (const bign &b){
bign c;
c.len=len+b.len;
for(int i=0;i<len;i++){
for(int j=0;j<b.len;j++){
c.s[i+j]+=s[i]*b.s[j];
}
}
for(int i=0;i<c.len;i++){
c.s[i+1]+=c.s[i]/10;
c.s[i]%=10;
}
c.clean();
return c;
}
bign operator *= (const bign &b){
*this =*this*b;
return *this;
}
bign operator - (const bign &b){
bign c;
c.len=0;
for(int i=0,g=0;i<len;i++){
int x=s[i]-g;
if(i<b.len) x-=b.s[i];
if(x>=0) g=0;
else{g=1; x+=10;}
c.s[c.len++]=x;
}
c.clean();
return c;
}
bign operator -= (const bign &b){
*this=*this-b;
return *this;
}
bign operator / (const int &b){
int f=0;
bign c;
for(int i=len-1;i>=0;i--){
f=f*10+s[i];
c.s[i]=f/b;
f%=b;
}
c.len=len;
c.clean();
return c;
}
bign operator / (const bign &b){
bign c,f=0;
for(int i=len-1;i>=0;i--){
f=f*10;
f.s[0]=s[i];
while(f>b||f==b){
f-=b;
c.s[i]++;
}
}
c.len=len;
c.clean();
return c;
}
bign operator /= (const bign &b){
*this=*this/b;
return *this;
}
bign operator % (const bign &b){
bign r=*this/b;
r=*this-r*b;
return r;
}
bign operator %= (const bign &b){
*this=*this%b;
return *this;
}
bool operator < (const bign &b){
if(len!=b.len) return len<b.len;
for(int i=len-1;i>=0;i--){
if(s[i]!=b.s[i]) return s[i]<b.s[i];
}
return false;
}
bool operator > (const bign &b){
if(len!=b.len) return len>b.len;
for(int i=len-1;i>=0;i--){
if(s[i]!=b.s[i]) return s[i]>b.s[i];
}
return false;
}
bool operator == (const bign &b){
return !(*this>b)&&!(*this<b);
}
string str() const{
string res="";
for(int i=0;i<len;i++){
if(s[i]<10) res=char(s[i]+'0')+res;
else res=char(s[i]+'A'-10)+res;
}
return res;
}
}a,b,c;
int n,ka,kb;
unsigned long long ans,cnt,l=1;
struct chen{
int a;
int b;
bool friend operator < (chen x,chen y){
return (x.a*x.b)<(y.a*y.b);
}
}peo[maxn];
int main(){
cin>>n;
cin>>ka>>kb;
peo[0].a=ka,peo[0].b=kb;
for(int i=1;i<=n;i++) cin>>peo[i].a>>peo[i].b;
sort(peo+1,peo+n+1);
// for(int i=0;i<=n;i++){
// cnt=l/peo[i].b;
// l=l*peo[i].a;
// ans=max(ans,cnt);
// }
bign m=peo[0].a,ans=0;
for(int i=1;i<=n;i++){
bign tmp=(m/peo[i].b);
if(tmp>ans) ans=tmp;
m*=bign(peo[i].a);
}
cout<<ans.str()<<endl;
return 0;
}