萌新80求debug
查看原帖
萌新80求debug
242524
JRzyh楼主2020/8/15 20:25

贪心加高精

#include<bits/stdc++.h>
using namespace std;
struct big
{
    vector<int> s;
    static const int BASE=1000000;
    static const int WIDTH=6;
    void standardize()
    {
        for(int i=s.size()-1;i>=0;--i)
        {
            if(s[i]==0)
                s.pop_back();
            else
                break;
        }
        if(s.empty())
            s.push_back(0);
    }
    big& operator = (long long num)
    {
        s.clear();
        do
        {
            s.push_back(num%BASE);
            num/=BASE;
        }while(num>0);
        return *this;
    }
    big& operator = (const string& num)
    {
        s.clear();
        int len=(num.size()-1)/WIDTH+1;
        int x=0;
        for(int i=0;i<len;++i)
        {
            int end=num.size()-i*WIDTH;
            int start=max(0,end-WIDTH);
            sscanf(num.substr(start,end-start).c_str(),"%d",&x);
            s.push_back(x);
        }
        standardize();
        return *this;
    }
    big operator + (const big& rhs) const
    {
        int size=max(s.size(),rhs.s.size());
        int carry=0;
        big ans;
        for(int i=0;i<size;++i)
        {
            int sum=carry;
            if(i<s.size()) sum+=s[i];
            if(i<rhs.s.size()) sum+=rhs.s[i];
            carry=sum/BASE;
            ans.s.push_back(sum%BASE);
        }
        if(carry>0)
        {
            ans.s.push_back(carry);
        }
        return ans;
    }
    big operator * (const big& rhs) const
    {
        big ans;
        for(int i=0;i<rhs.s.size();++i)
        {
            big lans;
            for(int k=0;k<i;++k) lans.s.push_back(0);
            int carry=0;
            for(int j=0;j<s.size();++j)
            {
                int result=rhs.s[i]*s[j]+carry;
                carry=result/BASE;
                lans.s.push_back(result%BASE);
            }
            while(carry>0)
            {
                lans.s.push_back(carry%BASE);
                carry/=BASE;
            }
            ans=ans+lans;
        }
        return ans;
    }
    big operator - (const big& rhs) const
    {
        big ans;
        int carry=0;
        for(int i=0;i<s.size();++i)
        {
            int diff=s[i]-carry;
            if(i<rhs.s.size()) diff-=rhs.s[i];
            carry=0;
            while(diff<0)
            {
                ++carry;
                diff+=BASE;
            }
            ans.s.push_back(diff);
        }
        ans.standardize();
        return ans;
    }
    big operator / (int rhs) const
    {
        big ans;
        vector<int> t;
        long long rmder=0;
        for(int i=s.size()-1;i>=0;--i)
        {
            long long temp=rmder*BASE+s[i];
            long long div=temp/rhs;
            rmder=temp%rhs;
            t.push_back(div);
        }
        for(int i=t.size()-1;i>=0;--i)
            ans.s.push_back(t[i]);
        ans.standardize();
        return ans;
    }
    friend ostream& operator << (ostream& out,const big& rhs)
    {
        out<<rhs.s.back();
        for(int i=rhs.s.size()-2;i>=0;--i)
        {
            char buf[10];
            sprintf(buf,"%06d",rhs.s[i]);
            cout<<string(buf);
        }
        return out;
    }
    bool operator < (const big& rhs) const
    {
        if(s.size()!=rhs.s.size()) return s.size()<rhs.s.size();
        for(int i=s.size()-1;i>=0;--i)
        {
            if(s[i]!=rhs.s[i])
                return s[i]<rhs.s[i];
        }
        return false;
    }
};
int n;
big sum[1006],ans[1006],max1;
struct r
{
	long long lift;
	long long right;
};
r king,da[1006];
bool compare(r a,r b)
{
	return a.lift*a.right<b.lift*b.right;
}
int main()
{
	cin>>n;
	cin>>king.lift>>king.right;
	for(int i=1;i<=n;i++)
	{
		cin>>da[i].lift>>da[i].right;
		sum[i]=1;
	}
	sort(da+1,da+n+1,compare);
	sum[0]=king.lift;
	for(int i=1;i<=n;i++)
	{
		big temp;
		temp=da[i].lift;
		sum[i]=sum[i-1]*temp;
	}
	for(int i=1;i<=n;i++)
	{
		ans[i]=sum[i-1]/da[i].right;
	}
	max1=ans[1];
	for(int i=2;i<=n;i++)
	{
		max1=max(ans[i],max1);
	}
	cout<<max1;
	return 0;
}

前面是个封装高精,应该不会挂吧(?)_{(?)}

2020/8/15 20:25
加载中...