解题报告_18.5.22_POJ_1009_0

转载自:https://blog.csdn.net/lyy289065406/article/details/6648671

#include<iostream>  
#include<cmath>  
#include<algorithm>  
using namespace std;  
  
const int size=1000;  //每幅图片的pair上限  
int width;  //Map的宽  
int total=0;  //像素点总个数  
  
typedef class OutMapPix  
{  
    public:  
        int pos;    //OutMap中每个像素点的顺序位置,pos从1开始  
        int code;   //OutMap中每个像素点对应InMap的编码  
}Pix;  
  
int InMapPair[size][2];  //InMapPair[][0]为像素值,InMapPair[][1]为InMapPair[][0]连续出现的个数  
Pix OutMap[size*8];    //每个pix都依赖其周围的8个点编码  
  
int cmp(const void* a,const void* b);  //快排比较规则  
int GetValue(int pos);  //返回第pos个像素点的像素值  
int GetCode(int pos);   //返回第pos个像素点的编码  
  
int main(int k)  
{  
    while(cin>>width && width)  
    {  
        int pairv,pairt;  
        k=total=0;  
        while(cin>>pairv>>pairt && pairt)  
        {  
            InMapPair[k][0]=pairv;  
            InMapPair[k++][1]=pairt;  
            total+=pairt;  
        }  
        int PairNum=k;  //pair的个数  
  
        cout<<width<<endl;  
  
        int pos=1;  //当前处理的像素点的位置  
        k=0; //OutMap[]指针  
        for(int p=0;p<=PairNum;p++)  
        {  
            int row=(pos-1)/width;  //得到pos在二维图对应的坐标  
            int col=(pos-1)%width;  
  
            for(int i=row-1;i<=row+1;i++)        //枚举(row,col)周围及其自身共9个点(x,y)  
                for(int j=col-1;j<=col+1;j++)  
                {  
                    int tpos=i*width+j;  //得到(x,y)的顺序位置  
  
                    if(i<0 || j<0 || j>=width || tpos>=total)  
                        continue;  
  
                    OutMap[k].pos=tpos+1;  
                    OutMap[k++].code=GetCode(tpos+1);  //对发生变化的像素点的附近8个点编码  
                }  
  
            pos+=InMapPair[p][1];  //跳跃,确定下一个像素发生变化的点的位置  
        }  
  
        qsort(OutMap,k,sizeof(Pix),cmp);  //对OutMap根据顺序位置  
  
        /*OutPut*/  
  
        Pix temp=OutMap[0];  
        for(int i=0;i<k;i++)  
        {  
            if(temp.code==OutMap[i].code)  
                continue;  
            cout<<temp.code<<' '<<OutMap[i].pos-temp.pos<<endl;  
            temp=OutMap[i];  
        }  
        cout<<temp.code<<' '<<total-temp.pos+1<<endl;  
        cout<<"0 0"<<endl;  
  
    }  
    cout<<0<<endl;  
  
    return 0;  
}  
  
  
/*快排比较规则*/  
int cmp(const void* a,const void* b)  
{  
    Pix* x=(Pix*)a;  
    Pix* y=(Pix*)b;  
    return x->pos - y->pos;  
}  
  
/*返回第pos个像素点的像素值*/  
int GetValue(int pos)  
{  
    int i=0,p=0;  
    while(p<pos)  
        p+=InMapPair[i++][1];  
  
    return InMapPair[i-1][0];  
}  
  
/*返回第pos个像素点的编码*/  
int GetCode(int pos)  
{  
    int code=GetValue(pos);  
    int MaxAbs=0;  
  
    int row=(pos-1)/width;  
    int col=(pos-1)%width;  
  
    for(int i=row-1;i<=row+1;i++)  
        for(int j=col-1;j<=col+1;j++)  
        {  
            int tpos=i*width+j;  
  
            if(i<0 || j<0 || j>=width || tpos>=total || tpos==pos-1)  //tpos==pos-1为中心的像素点,即当前待编码的点  
                continue;  
  
            int tcode=GetValue(tpos+1);  
  
            if(MaxAbs<abs(tcode-code))   //注意取绝对值  
                MaxAbs=abs(tcode-code);  
        }  
  
    return MaxAbs;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
04-26
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值