NOIP2012 国王游戏
2015-06-13 21:51
357 查看
题目:http://www.luogu.org/problem/show?pid=1080
分析:贪心算法,可以证明正确性。
一开始只拿了60分,写了错解的贪心,后来看题解才明白。
需要高精度,可以用压位优化.
证明:
代码:
分析:贪心算法,可以证明正确性。
一开始只拿了60分,写了错解的贪心,后来看题解才明白。
需要高精度,可以用压位优化.
证明:
代码:
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int Tmax=1005; struct node { int l,r; }; node data[Tmax]; int n,ans[Tmax],sum[Tmax],tmp[Tmax]; void output() { printf("%d",ans[ans[0]]); ans[0]--; for(;ans[0]>=1;ans[0]--) printf("%4.4d",ans[ans[0]]); return; } bool cmp2() { if(ans[0]<tmp[0]) return true; if(ans[0]>tmp[0]) return false; int i=ans[0]; while(i>=1){ if(ans[i]<tmp[i]) return true; i--; } return false; } void div(int x) { int i,k=0; for(i=sum[0];i>=1;i--) { tmp[i]=sum[i]+k*10000; k=tmp[i]%x; tmp[i]/=x; } tmp[0]=sum[0]; while(tmp[tmp[0]]==0) tmp[0]--; if(cmp2()==true) memcpy(ans,tmp,sizeof(tmp)); return; } void mul(int x) { int k=0,i; for(i=1;i<=sum[0]||k;i++) { sum[i]=sum[i]*x+k; k=sum[i]/10000; sum[i]%=10000; } sum[0]=i-1; return; } void init() { int t=data[0].l*data[1].l; while(t>0) { sum[++sum[0]]=t%10000; t/=10000; } t=data[0].l/data[1].r; while(t>0) { ans[++ans[0]]=t%10000; t/=10000; } return; } bool cmp(const node &a,const node &b) { return (a.l*a.r<b.l*b.r); } int main() { int i; scanf("%d",&n); for(i=0;i<=n;i++){ scanf("%d %d",&data[i].l,&data[i].r); } sort(data+1,data+1+n,cmp); init();//ans=data[0].l/data[1].r;//sum=data[0].l*data[1].l; for(i=2;i<=n;i++){ div(data[i].r);//ans=max(ans,sum/data[i].r); mul(data[i].l);//sum*=data[i].l; } output(); return 0; }
相关文章推荐
- 转 点击关闭时最小化到任务栏
- python进程池剖析(二)
- java EE 开发入门小程序 mvc设计模式 学生信息的管理
- html5跨域方法
- JDBC:getNString()和getString()的区别
- Linux虚拟机Redis安装
- LA 3027 - Corporative Network
- wpf实现图片拖动和缩放
- Android代码中实现WAP方式联网(转载!)
- 第59章、SharedPreferences存储(从零开始学Android)
- CocoaPod 使用
- heartbeat v1 + ldirctord
- LA 3027 - X-Plosives
- UVA-11549 Calculator Conundrum
- TimesTen1122安装与配置
- 关于MinGW编译程序出现缺少libgcc_s_dw2-1.dll问题
- uva 147 Dollars
- python进程池剖析(一)
- Java-马士兵设计模式学习笔记-装饰者模式
- python编程之 Pie游戏