zoukankan      html  css  js  c++  java
  • 算法习题---4-9数据挖掘(Uva1591)

    一:题目

    这是最懵逼的一道题,什么鬼.........

    [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说)

    二:代码实现

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <string>
    
    unsigned int N, Sp, Sq, A_min, B_min;    
    //1<= N <=2^20是P,Q两个数组的元素个数,1 <= Sq,Sp <= 2^10分别是两个数组每个元素所占字节大小,所以两个数组分别最大占2^30字节
    unsigned long long Qofs, Pofs, K;
    //由公式偏移可以知道Pofs原来可能是2^30,先向左偏移会越界,所以选用一个较大的数据类型来存放
    
    //重点:Qofs按照格式可以知道偏移量是同Pofs一样递增,而且按照题目所说,使用偏移公式,Q数组可以不连续,而且不会重叠
    //因为Pofs最大30位,所以偏移不会超过30位,因此最大不会超过60位
    
    void main()
    {
        FILE* fp = freopen("data9.in", "r", stdin);
        freopen("data9.out", "w", stdout);
    
        while (!feof(fp))
        {
            scanf("%d %d %d", &N, &Sp, &Sq);
            K = 0xffffffffffffffff,A_min = B_min = 32;    //64位
            Pofs = (N-1)*Sp;    //直接是P数组最大偏移值去获取Q数组最大偏移值,从而获取K最小值
            
            for (int A = 0; A < 32; A++)
            {
                for (int B = 0; B < 32;B++)
                {
                    Qofs = (Pofs + (Pofs << A) >> B)+Sq;  //按照上面文章所说,书上公式是错误的额,这个公式是对的
                    if (Qofs < K && Qofs >= N*Sq)    //找到的第一个最小K,获取的A,B就是最小的,我们不需要设置<=k去判断后面的AB值,没有必要
                    {
                        K = Qofs;
                        A_min = A;
                        B_min = B;
                    }
                }
            }
            printf("%llu %u %u
    ", K, A_min, B_min);
            getchar();
        }
    
        freopen("CON", "r", stdin);
        freopen("CON", "w", stdout);
    }
  • 相关阅读:
    面试十题(4)
    TS中给接口指定的成员?
    TS中定义泛型接口的两种方式
    ts中泛型的使用
    ts中类的属性的封装
    ts中接口的使用
    自定义hook的步骤
    react中如何使用useReducer?
    react中useContext的使用
    react 中useRef的作用
  • 原文地址:https://www.cnblogs.com/ssyfj/p/11174605.html
Copyright © 2011-2022 走看看