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
  • 相关阅读:
    sass 基本语法
    ruby gem的安装步骤
    sass 安装与各种命令
    《转》阿里负责人揭秘面试潜规则
    Json数组基础知识
    Json序列化与反序列化
    《转》请放下你的无效社交
    Perfmon
    C# 连接SQL Server数据库的几种方式--server+data source等方式
    C#三种字符串拼接方法的效率对比
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/11330623.html
Copyright © 2011-2022 走看看