河南省第五届ACM程序设计竞赛题解

博主分享了参与河南省第五届ACM程序设计竞赛的经历,解析了三道题目:一道涉及排序的简单问题,但因细节失误导致WA;一道关于寻找整数拆分最大乘积的算法,关键在于大数相乘和大数类模板;还有一道题目是从他人博客获取的代码,表示自己未能独立解决。另外,博主提到了一道英语题,起初理解困难,最终看懂并完成代码实现。
摘要由CSDN通过智能技术生成

呵呵~我不是河南省的,我只是顺便做下~

第一题:NYOJ 540(奇怪的排序),比较简单,但是我下sort排序时少加了一位,WA~~~

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=100;
struct Perm{
    Perm(){A=B=0;} 
    int A,B;
};
bool mysort(const Perm &P1,const Perm &P2)
{   if(P1.B>P2.B) return P1.B<P2.B;
}
int main()
{   int value,num,pos,low,high;
    cin>>num;
    while(num--)
    {   Perm P[MAX];
        cin>>low>>high;
        for(int i=low;i<=high;i++)
        {   value=P[pos=i-low].A=i;
            while(value)
            {   P[pos].B=P[pos].B*10+value%10;
                value/=10;
            }    
        }
        sort(P,P+high-low+1,mysort);
        for(int i=0;i<high-low;i++)
            cout<<P[i].A<<" ";
        cout<<P[high-low].A<<endl;    
    } 
    return 0;
}

第二题:NYOJ 541(最强DE战斗力),意思就是给你一个整数要你拆分为任意自然数之和,求这个数的最大乘积是多少。

对于6,可以进行如下的拆分:3*3=9;

对于12,拆分为:3*3*3*3=81;

对于19,拆分为:3*3*3*3*3*2*2=972;

这个时候拆分的方法就是,将它分解为:3^a+2^b(b=0,1,2)的形式是最大的。大数资料请见大数相乘大数类模板

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值