记录编号 |
59077 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2013]花卉节 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.477 s |
提交时间 |
2013-05-01 21:55:50 |
内存使用 |
2.60 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<deque>
#include<fstream>
using namespace std;
const int SIZEL=101;
class HP{
public:
unsigned long long s[SIZEL];//数
int l;//长度,不是指针
string str;
void turnint(void){
int i;
for(i=0;i<l;i++) s[i]-='0';
}
void turnchar(void){
int i;
for(i=0;i<l;i++) s[i]+='0';
}
void clear(void){
int i;
for(i=0;i<SIZEL;i++) s[i]=0;
l=1;
}
void haneg(void){
int i=0,j=l-1,temp;
while(i<=j) temp=s[i],s[i]=s[j],s[j]=temp,i++,j--;
}
void outint(void){
int i;
for(i=l-1;i>=0;i--) cout<<(int)s[i];
cout<<endl;
}
};
HP operator + (HP a,long long b){
a.s[0]+=b;
int i=0;
while(i<a.l||a.s[i]){
a.s[i+1]+=a.s[i]/10;
a.s[i]%=10;
i++;
}
if(i>a.l) a.l=i;
while(a.s[a.l-1]==0) a.l--;
return a;
}
unsigned long long B,N;//资金总数和花种数
const long long SIZEN=100001;
unsigned long long p[SIZEN]={0},c[SIZEN]={0};
unsigned long long lis[SIZEN]={0};
bool cmp(unsigned long long a,unsigned long long b){
return p[a]<p[b];
}
#define now lis[i]
int main(){
freopen("haoi13_t2.in","r",stdin);
freopen("haoi13_t2.out","w",stdout);
cin>>N>>B;
long long i;
for(i=0;i<N;i++) cin>>p[i]>>c[i],lis[i]=i;
sort(lis,lis+N,cmp);
unsigned long long sumq=0;//总人数和总钱数
HP sumr;
sumr.clear();
unsigned long long temp,jump,k;
i=0;
long long ans=0;
while(sumq<B&&i<N){
temp=p[now]*c[now];
jump=temp+sumq;
if(jump<=B){
sumq=jump;
sumr=sumr+c[now];
i++;
}
else{
k=(B-sumq)/p[now];
sumr=sumr+k;
break;
}
}
sumr.outint();
return 0;
}