记录编号 | 168341 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [NOIP 2012]国王游戏 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.056 s | ||
提交时间 | 2015-07-03 17:09:21 | 内存使用 | 0.49 MiB | ||
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long LL; int N,L[10010],R[10010]; LL MOD=1000000; class miku { public: LL s; int id; }w[10010]; bool cmp(miku a,miku b) { return a.s<b.s; } class miku2 { public: int n; LL s[1000]; miku2() { n=1; memset(s,0,sizeof(s)); } void operator =(const int &a) { n=1; s[0]=a; } bool operator >(const miku2 &a) { if(n!=a.n) return n>a.n; for(int i=n;i>=0;i--) if(s[i]!=a.s[i]) return s[i]>a.s[i]; return 0; } void print() { printf("%lld",s[n-1]); for(int i=n-2;i>=0;i--) { printf("%06lld",s[i]); } } }ans; inline miku2 operator * (const miku2 &a,const int &b) { miku2 c; c.n=a.n; for(int i=0;i<c.n;i++) { c.s[i]+=a.s[i]*b; c.s[i+1]+=c.s[i]/MOD; c.s[i]%=MOD; } while(c.s[c.n]>0) c.n++; return c; } inline miku2 operator /(miku2 a,const int &b) { for(int i=a.n-1;i>=0;i--) { if(i>0) a.s[i-1]+=(a.s[i]%b)*MOD; a.s[i]/=b; } while(a.n>0&&a.s[a.n-1]==0) a.n--; return a; } int main() { freopen("kinggame.in","r",stdin); freopen("kinggame.out","w",stdout); scanf("%d",&N); for(int i=0;i<=N;i++) { scanf("%d%d",&L[i],&R[i]); w[i].id=i; w[i].s=L[i]*R[i]; } sort(w+1,w+N+1,cmp); miku2 now,tem; now=L[0];ans=0; for(int i=1;i<=N;i++) { tem=now/R[w[i].id]; if(tem>ans) ans=tem; now=now*L[w[i].id]; } //printf("%d",ans); ans.print(); return 0; }