[noip2012]国王游戏 题解
2017-10-29 21:11
447 查看
显然,这样题一定是要排序的,如何拍呢。
我们先猜一猜,发现只要按照乘积大小来排序就好了。至于证明,我们这样想,如果只交换两个相邻的数,产生的影响只要它们两个数之间,然后讨论一下就可以了。
然后,60%数据保证答案小于10^9,说明什么,之后的数据要上高精度,好麻烦呀。
但其实还是可以写的,可以写在一个结构体内,但我好像不会233。就用的函数,貌似很丑,大家凑合看看。
我们先猜一猜,发现只要按照乘积大小来排序就好了。至于证明,我们这样想,如果只交换两个相邻的数,产生的影响只要它们两个数之间,然后讨论一下就可以了。
然后,60%数据保证答案小于10^9,说明什么,之后的数据要上高精度,好麻烦呀。
但其实还是可以写的,可以写在一个结构体内,但我好像不会233。就用的函数,貌似很丑,大家凑合看看。
#include<bits/stdc++.h> using namespace std; struct bigint{ int len; int data[5005]; }; struct person{ int l,r,data; bool operator < (const person &A)const { return data<A.data; } };person A[1005]; int n,a,b; bigint tmp,ans,mx; inline int cmp(bigint A,bigint B) { if(A.len>B.len)return 1; if(B.len>A.len)return -1; for(int i=A.len;i>=1;i--) { if(A.data[i]==B.data[i])continue; if(A.data[i]>B.data[i])return 1; if(A.data[i]<B.data[i])return -1; } return 0; } inline void create(bigint &A,int x) { A.len=0; while(x)A.data[++A.len]=x%10,x/=10; } inline bigint multiply(bigint A,int b) { bigint ans; ans.len=0; memset(ans.data,0,sizeof(ans.data)); int x=0; for(int i=1;i<=A.len;i++) { x=x+A.data[i]*b; ans.data[++ans.len]=x%10; x/=10; } while(x)ans.data[++ans.len]=x%10,x/=10; return ans; } inline void reverse(bigint &A) { for(int i=1;i<=A.len/2;i++)swap(A.data[i],A.data[A.len-i+1]); } inline bigint divide(bigint A,int b) { reverse(A); bigint tmp; tmp.len=0; memset(tmp.data,0,sizeof(tmp.data)); int x=0; for(int i=1;i<=A.len;i++) { x=x*10+A.data[i]; tmp.data[++tmp.len]=x/b; x%=b; } int st=1; while(tmp.data[st]==0&&st<tmp.len)st++; bigint ans; ans.len=0; memset(ans.data,0,sizeof(ans.data)); for(int i=st;i<=tmp.len;i++) ans.data[++ans.len]=tmp.data[i]; reverse(ans); return ans; } inline void write(bigint A) { for(int i=A.len;i>=1;i--)cout<<A.data[i]; cout<<endl; } int main() { freopen("in.txt","r",stdin); scanf("%d",&n);scanf("%d%d",&a,&b); for(int i=1;i<=n;i++)scanf("%d%d",&A[i].l,&A[i].r),A[i].data=A[i].l*A[i].r; sort(A+1,A+n+1); create(tmp,a); ans.len=1,ans.data[1]=0; for(int i=1;i<=n;i++) { mx=divide(tmp,A[i].r); if(cmp(mx,ans)==1)ans=mx; tmp=multiply(tmp,A[i].l); } write(ans); return 0; }
相关文章推荐
- [NOIP2012]国王游戏 题解
- NOIP2012 国王游戏 题解
- [题解] NOIP2012 国王游戏(数论+高精)
- NOIP2012 提高组 复赛 day1 game 国王游戏 再见
- 【noip 2012】国王游戏 贪心+高精度
- [NOIP2012]洛谷[P1080]国王游戏 贪心+高精
- CODE[VS] 1198【NOIP2012】 国王游戏(贪心
- noip2012 国王游戏
- 洛谷 [NOIP2012 D1T2] P1080 国王游戏
- NOIP2012国王游戏
- 【noip2012 T2】 国王的游戏
- [T][5]NOIP 2012 国王游戏
- NOIP2012 国王游戏
- NOIP 2012 Senior 2 - 国王游戏
- 【NOIP2012】国王游戏
- noip2012国王游戏
- noip2012 国王游戏
- noip 2012 国王游戏
- [NOIP 2012] 国王游戏
- 【NOIP 2012 国王游戏】 贪心+高精度