zoukankan      html  css  js  c++  java
  • 【解题报告】 [NOIP2012]国王游戏

    【解题报告】 [NOIP2012]国王游戏

    题目:国王游戏

    解题思路:

    贪心

    我们只需要将所有大臣左右手上的数的乘积从小到大进行排序,我们就得到了最优答案,但是这个代码要写高精度就是一个麻烦的东西,要好好写,话说近几年不出高精度的题目了,就怕今年要出。

    AC代码

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    const int maxn=10005;
    int n;
    struct mini
    {
    	int a;
    	int b;
    }m[maxn];
    bool cmp(mini x,mini y)
    {
    	return x.a*x.b<y.a*y.b;
    }
    int s[4005],len;
    int ans[4005],ans_l(0); 
    void mul(int x)
    {
    	int t(len);
    	for(int i=1;i<=len;++i)
    	s[i]*=x;
    	for(int i=1;i<=len+5;++i)
    	{
    		if(s[i])
    		t=i;
    		s[i+1]+=s[i]/10;
    		s[i]%=10;
    	}
    	len=t;
    }
    void cpy(int c[],int c_l)
    {
    	for(int i=1;i<=c_l;++i)
    	ans[i]=c[i];
    	ans_l=c_l;
    }
    void out(int s[],int l)
    {
    	for(int i=l;i>=1;--i)
    	cout<<s[i];
    	cout<<endl; 
    }
    void div(int x)
    {
    	int c[4005],l(-1);
    	for(int i=1;i<=len;++i)
    	c[i]=s[i];
    	for(int i=len;i>=1;--i)
    	{
    		c[i-1]+=(c[i]%x)*10;
    		c[i]/=x;
    		if(c[i]&&l==-1)
    		l=i;
    	}
    	if(ans_l==l)
    	{
    		bool flg(0);
    		for(int i=l;i>=1;--i)
    		{
    			if(ans[i]<c[i])
    			{
    				flg=1;
    				break;
    			}
    			else break;
    		}
    		if(flg)
    		cpy(c,l);
    	}
    	if(ans_l<l)
    	cpy(c,l);
    }
    int main()
    {
    	cin>>n;
    	cin>>m[0].a>>m[0].b;
    	for(int i=1;i<=n;++i)
    	cin>>m[i].a>>m[i].b;
    	sort(m+1,m+1+n,cmp);
    	s[1]=1;len=1;
    	mul(m[0].a);
    	for(int i=1;i<=n;++i)
    	div(m[i].b),mul(m[i].a);
    	out(ans,ans_l);
    	return 0;
    }
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    Jessica's Reading Problem POJ
    FatMouse and Cheese HDU
    How many ways HDU
    Humble Numbers HDU
    Doing Homework again
    Stacks of Flapjacks UVA
    Party Games UVA
    24. 两两交换链表中的节点
    面试题 03.04. 化栈为队
    999. 可以被一步捕获的棋子数
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/11330623.html
Copyright © 2011-2022 走看看