@[かみじょ](/space/show?uid=126074) 这题要写高精
by 缥缈的鸿影 @ 2018-11-08 00:22:50
@[爱吃肉的瓶子](/space/show?uid=98606)
你没看清吧,用了,,,话说之前没用也是60
by かみじょ @ 2018-11-08 00:26:03
@[かみじょ](/space/show?uid=126074)
```cpp
#include<stdio.h>
#include<cstring>
#include<string>
#include<iostream>
#include<vector>
using namespace std;
struct BigNum {
static const int BASE=100000000;
static const int WIDTH=8;
vector<long long>s;
BigNum(long long num=0){*this=num;}
BigNum operator = (long long num){
s.clear();
do{
s.push_back(num%BASE);
num/=BASE;
} while(num>0);
return *this;
}
BigNum operator = (const string& str){
s.clear();
int x,len=(str.length()-1)/WIDTH+1;
for(int i=0;i<len;i++){
int end=str.length()-i*WIDTH;
int start=max(0,end-WIDTH);
sscanf(str.substr(start,end-start).c_str(),"%d",&x);
s.push_back(x);
}
return *this;
}
BigNum operator + (const BigNum& b)const{
BigNum c;
c.s.clear();
for(int i=0,g=0;;i++){
if(g==0&&i>=s.size()&&i>=b.s.size())break;
int x=g;
if(i<s.size())x+=s[i];
if(i<b.s.size())x+=b.s[i];
c.s.push_back(x%BASE);
g=x/BASE;
}
return c;
}
bool operator < (const BigNum& b)const{
if(s.size()!=b.s.size())return s.size()<b.s.size();
for(int i=s.size()-1;i>=0;i--)
if(s[i]!=b.s[i])return s[i]<b.s[i];
return false;
}
bool operator > (const BigNum& b)const{return b<*this;}
bool operator <= (const BigNum& b)const{return !(b<*this);}
bool operator >= (const BigNum& b)const{return !(*this<b);}
bool operator != (const BigNum& b)const{return b<*this||*this<b;}
bool operator == (const BigNum& b)const{return !(b<*this)&&!(*this<b);}
void S(int a){
vector<long long>c;
for(int i=0;i<s.size();++i){
if(c.size()<=i)c.push_back(s[i]*a);else
c[i]+=s[i]*a;
if(c[i]/BASE)
if(c.size()<=i+1)c.push_back(c[i]/BASE);else
c[i+1]=c[i]/BASE;
c[i]%=BASE;
}
s=c;
}
void C(int a){
vector<long long>c(s);
if(s.back()/a)c[s.size()-1]=s.back()/a,s[s.size()-1]%=a;else
c.pop_back();
for(int i=s.size()-2;i>=0;--i){
long long num=s[i+1]*BASE+s[i];
c[i]=num/a;
num%=a;
s[i]=num;
}
s=c;
}
};
ostream& operator << (ostream &out,const BigNum& x){
out<<x.s.back();
for(int i=x.s.size()-2;i>=0;i--){
char buf[20];
sprintf(buf,"%08d",x.s[i]);
for(int j=0;j<strlen(buf);j++)out<<buf[j];
}
return out;
}
istream& operator >> (istream &in,BigNum& x){
string s;
if(!(in>>s))return in;
x=s;
return in;
}
```
这是高精模板,拿去吧
by 缥缈的鸿影 @ 2018-11-08 00:26:52
@[かみじょ](/space/show?uid=126074)
我的AC代码:
```cpp
#include<map>
#include<cmath>
#include<stack>
#include<cstdio>
#include<queue>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned long long ll;
int n;
struct BigNum {
static const int BASE=100000000;
static const int WIDTH=8;
vector<long long>s;
BigNum(long long num=0){*this=num;}
BigNum operator = (long long num){
s.clear();
do{
s.push_back(num%BASE);
num/=BASE;
} while(num>0);
return *this;
}
BigNum operator = (const string& str){
s.clear();
int x,len=(str.length()-1)/WIDTH+1;
for(int i=0;i<len;i++){
int end=str.length()-i*WIDTH;
int start=max(0,end-WIDTH);
sscanf(str.substr(start,end-start).c_str(),"%d",&x);
s.push_back(x);
}
return *this;
}
BigNum operator + (const BigNum& b)const{
BigNum c;
c.s.clear();
for(int i=0,g=0;;i++){
if(g==0&&i>=s.size()&&i>=b.s.size())break;
int x=g;
if(i<s.size())x+=s[i];
if(i<b.s.size())x+=b.s[i];
c.s.push_back(x%BASE);
g=x/BASE;
}
return c;
}
bool operator < (const BigNum& b)const{
if(s.size()!=b.s.size())return s.size()<b.s.size();
for(int i=s.size()-1;i>=0;i--)
if(s[i]!=b.s[i])return s[i]<b.s[i];
return false;
}
bool operator > (const BigNum& b)const{return b<*this;}
bool operator <= (const BigNum& b)const{return !(b<*this);}
bool operator >= (const BigNum& b)const{return !(*this<b);}
bool operator != (const BigNum& b)const{return b<*this||*this<b;}
bool operator == (const BigNum& b)const{return !(b<*this)&&!(*this<b);}
void S(int a){
vector<long long>c;
for(int i=0;i<s.size();++i){
if(c.size()<=i)c.push_back(s[i]*a);else
c[i]+=s[i]*a;
if(c[i]/BASE)
if(c.size()<=i+1)c.push_back(c[i]/BASE);else
c[i+1]=c[i]/BASE;
c[i]%=BASE;
}
s=c;
}
void C(int a){
vector<long long>c(s);
if(s.back()/a)c[s.size()-1]=s.back()/a,s[s.size()-1]%=a;else
c.pop_back();
for(int i=s.size()-2;i>=0;--i){
long long num=s[i+1]*BASE+s[i];
c[i]=num/a;
num%=a;
s[i]=num;
}
s=c;
}
};
ostream& operator << (ostream &out,const BigNum& x){
out<<x.s.back();
for(int i=x.s.size()-2;i>=0;i--){
char buf[20];
sprintf(buf,"%08d",x.s[i]);
for(int j=0;j<strlen(buf);j++)out<<buf[j];
}
return out;
}
istream& operator >> (istream &in,BigNum& x){
string s;
if(!(in>>s))return in;
x=s;
return in;
}
BigNum ans,b[10005],sum,t;
struct AC{
int l,r;
}a[1005];
bool cmp(AC x,AC y){
return x.l*x.r<y.l*y.r;
}
int main(){
scanf("%lld",&n);
scanf("%lld%lld",&a[0].l,&a[0].r);
for(int i=1;i<=n;i++)scanf("%lld%lld",&a[i].l,&a[i].r);
sort(a+1,a+1+n,cmp);
sum=a[0].l;
for(int i=1;i<=n;i++){
t=sum;
sum.C(a[i].r);
b[i]=sum;
sum=t;
if(b[i]>ans)ans=b[i];
sum.S(a[i].l);
}
cout<<ans<<endl;
return 0;
}
```
by 缥缈的鸿影 @ 2018-11-08 00:28:56