POJ 3274 Gold Balanced Lineup

本文介绍了一种用于计算平衡区间的算法实现,通过将输入数据转换为二进制特征值,并利用快速排序进行优化处理,最终找出最长的平衡区间。特别讨论了如何处理特殊情形并给出了详细的代码示例。

说实在话对于英文渣渣的我读题真的很难。

下面是题目大意,对提供者表示感谢。


代码操作如下:
1、先将十进制数转换成二进制数记录保存。

2、然后逐行累加,得出到某只牛时某种特征出现了几次。

3、每行减去第一个数,得出一个序列,若两头牛之间是平衡区间的话,各个特征的增长数是相等的,及减掉第一个数得出来的序列是相等的。

4、寻找距离最远的两个相等的序列,得出答案。

我们可以由样例举例:

转换成二进制特征值为:

数字  特征值    第几头牛

   7          1 1 1                1

   6          0 1 1                2

   7          1 1 1                3

   2          0 1 0                4

   1          1 0 0                5

   4          0 0 1                6

   2          0 1 0                7

按行累加得:

1 1 1

1 2 2

2 3 3

2 4 3

3 4 3

3 4 4

3 5 4

都减去第一列得:

0 0 0

0 1 1

0 1 1

0 2 1

0 1 0

0 1 1

0 2 1

所以说  最大区间是  6-2 = 4.

有一种特殊情况就是当到了某一行出现全都是零的情况,例如:

0 1 2 1 1 0 2

0 0 0 2 1 1 1

0 0 0 0 0 0 0 

我们需要在所有序列之前加一行0以方便比较。

寻找相同序列的时候可以使用快排函数,这样比较方便,详细见代码。

下面是代码:

#include <stdio.h>
#include <stdlib.h>
int k;
struct node
{
    int d[30];
    int in ;
} cow[100005];
bool cmp(int x) 
{
    for(int i=0; i<k; i++)
    {
        if(cow[x].d[i]!=cow[x-1].d[i])
        {
            return 0;
        }
    }
    return 1;
}
int cmp2(const void *a,const void *b)//Qsort的比较函数
{
    struct node *aa=(struct node *)a;
    struct node *bb=(struct node *)b;
    for(int i=0; i<k; i++)
    {
        if(aa->d[i]!=bb->d[i])
        {
            return aa->d[i]-bb->d[i];
        }
    }
    return aa->in-bb->in;
}
int main()
{
    int n;
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        int a,i,j,x,y,max1=0;
        for(i=0;i<k;i++)
        {
            cow[0].d[i]=0;
        }
        cow[0].in=0;
        for(i=1; i<=n; i++)
        {
            scanf("%d",&a);
            for(j=0; j<k; j++)
            {
                cow[i].d[j]=a%2;
                a=a>>1;
            }
            cow[i].in=i;//记录这是第几头牛,方便排序后寻找。
            for(j=0; j<k; j++)
            {
                cow[i].d[j]+=cow[i-1].d[j];
            }
            for(j=1; j<k; j++)
            {
                cow[i].d[j]-=cow[i].d[0];
            }
            cow[i].d[0]=0;
        }
        qsort(cow,n+1,sizeof(cow[0]),cmp2);
        x=0,y=0,max1=0;
        for(i=1; i<=n; i++)
        {
            if(cmp(i))
            {
                y=i;
            }
            else
            {
                if(max1<cow[y].in-cow[x].in)
                {
                    max1=cow[y].in-cow[x].in;
                }
                x=i;
                y=i;
            }
        }
        if(max1<cow[y].in-cow[x].in)
        {
            max1=cow[y].in-cow[x].in;
        }
        printf("%d\n",max1);
    }
    return 0;
}


转载于:https://www.cnblogs.com/lin375691011/p/3996803.html

裂缝目标检测数据集 一、基础信息 数据集名称:裂缝目标检测数据集 图片数量: 训练集:462张图片 验证集:21张图片 测试集:9张图片 总计:492张图片 分类类别: crack(裂缝):指物体表面的裂缝,常见于建筑、基础设施等场景,用于损伤检测和风险评估。 标注格式: YOLO格式,包含边界框和类别标签,适用于目标检测任务。 数据格式:图片来源于实际场景,格式兼容常见深度学习框架。 二、适用场景 建筑与基础设施检查: 数据集支持目标检测任务,帮助构建能够自动识别裂缝区域的AI模型,用于建筑物、道路、桥梁等结构的定期健康监测和维护。 工业检测与自动化: 集成至智能检测系统,实时识别裂缝缺陷,提升生产安全和效率,适用于制造业、能源等领域。 风险评估与保险应用: 支持保险和工程行业,对裂缝进行自动评估,辅助损伤分析和风险决策。 学术研究与技术开发: 适用于计算机视觉与工程领域的交叉研究,推动目标检测算法在现实场景中的创新应用。 三、数据集优势 精准标注与任务适配: 标注基于YOLO格式,确保边界框定位准确,可直接用于主流深度学习框架(如YOLO、PyTorch等),简化模型训练流程。 数据针对性强: 专注于裂缝检测类别,数据来源于多样场景,覆盖常见裂缝类型,提升模型在实际应用中的鲁棒性。 实用价值突出: 支持快速部署于建筑监测、工业自动化等场景,帮助用户高效实现裂缝识别与预警,降低维护成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值