为什么只有90分,最后一个数据,通过不了

#include <bits/stdc++.h>
using namespace std;

vector<int> add(vector<int> x,vector<int> y)
{
    vector<int> ans;
    int flag=0;
    for (int i=0;i<x.size()||i<y.size();i++)
    {
        if (i<x.size()&&i>=y.size())
        {
            int a=(x[i]+0+flag)%10;
            ans.push_back(a);
            flag=(x[i]+0+flag)/10;
        }
        if(i<y.size()&&i>=x.size())
        {
            int a=(0+y[i]+flag)%10;
            ans.push_back(a);
            flag=(0+y[i]+flag)/10;
        }
        if (i<y.size()&&i<x.size())
        {
            int a=(x[i]+y[i]+flag)%10;
            ans.push_back(a);
            flag=(x[i]+y[i]+flag)/10;
        }
    }
    if (flag!=0)
        ans.push_back(flag);
    return ans;
}

vector<int> divi(vector<int> x,int y)
{
    vector<int> ans;
    int res=0;
    for (int i=x.size()-1;i>=0;i--)
    {
        res=res*10+x[i];
        ans.push_back(res/y);
        res=res%y;
    }
    vector<int> number;
    int i=0;
    while (ans[i]==0)
    {
        i++;
    }
    for (int j=i;j<ans.size();j++)
    {
        number.push_back(ans[j]);
    }
    return number;
}

vector<int> multi(vector<int> x,int y)
{
    vector<int> tmp1,tmp2;
    tmp1=x;
    while (y!=0)
    {
        tmp2.push_back(y%10);
        y/=10;
    }
    vector<int> ans[tmp2.size()];
    for (int i=0;i<tmp2.size();i++)
    {
        int flag=0;
        for (int j=0;j<tmp1.size();j++)
        {
                int a=(tmp2[i]*tmp1[j]+flag)%10;
                ans[i].push_back(a);
                flag=(tmp2[i]*tmp1[j]+flag)/10;
        }
        if (flag!=0)
            ans[i].push_back(flag);
    }
    
    vector<int> final_ans;
    final_ans=ans[0];
    for (int i=1;i<tmp2.size();i++)
    {
        int j=i;
        while (j--)
        {
            ans[i].insert(ans[i].begin(), 0);
        }
        final_ans=add(final_ans,ans[i]);
    }
    return final_ans;
}

int main()
{
    int n;
    cin>>n;
    int a,b;
    cin>>a>>b;
    vector<int> lord[n];
    for (int i=0;i<n;i++)
    {
        int x,y;
        cin>>x>>y;
        lord[i].push_back(x);
        lord[i].push_back(y);
    }
    for (int i=0;i<n-1;i++)
    {
        for (int j=0;j<n-1-i;j++)
        {
            int x=lord[j][0]*lord[j][1];
            int y=lord[j+1][0]*lord[j+1][1];
            if (x>y)
            {
                vector<int> tmp=lord[j];
                lord[j]=lord[j+1];
                lord[j+1]=tmp;
            }
        }
    }
    vector<int> count;
    if (a==0)
        count.push_back(a);
    while (a!=0)
    {
        count.push_back(a%10);
        a/=10;
    }
    for (int i=0;i<n;i++)
    {
        if (i!=n-1)
        {
            count=multi(count,lord[i][0]);
        }
        else
            count=divi(count,lord[i][1]);
    }
    
    for (int i=0;i<count.size();i++)
    {
        cout<<count[i];
    }
    return 0;
}

全部评论
最后输出的时候我们要进行判断向下取整后是否为0,如果不是0,直接输出结果,如果是0,按照题意,达成最少要拿1个金币,所以输出是1
点赞 回复 分享
发布于 2023-10-11 16:58 江苏

相关推荐

不愿透露姓名的神秘牛友
07-10 11:31
点赞 评论 收藏
分享
Lorn的意义:你这种岗位在中国现在要么牛马天天加班,要么关系户进去好吃好喝,8年时间,真的天翻地覆了,对于资本来说你就说一头体力更好的牛马,哎,退伍没有包分配你真的亏了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务