zoukankan      html  css  js  c++  java
  • hdu 2058 The sum problem

    数学题目。折腾了一天,这种方法不是最好的,不过按照自己的第一直觉的方法AC还是很开心的。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    struct abc{
        int start, end;
    }dt[5000000];
    bool cmp(const abc&a, const abc&b)
    {
        if (a.start == b.start) return a.end < b.end;
        return a.start < b.start;
    }
    int main()
    {
        int n, m, i;
        while (~scanf("%d%d", &n, &m))
        {
            if (n == 0 && m == 0) break;
            int summ = 0;
            int yy = sqrt(1.0*m);
            if (yy*yy < m) yy++;
            for (i = yy; i >= 1; i--)
            {
                if (m%i == 0)
                {
                    int uu = i;
                    int hh = m / i;
    
                    if (uu == 1)
                    {
                        if (m <= n)
                        {
                            dt[summ].start = hh;
                            dt[summ].end = hh;
                            summ++;
                        }
                        if ((hh - 1) % 2 == 0)
                        {
                            int x = (hh - 1) / 2;
                            if (x >= 1 && x <= n&&x + 1 >= 1 && x + 1 <= n)
                            {
                                dt[summ].start = x;
                                dt[summ].end = x + 1;
                                summ++;
                            }
                        }
                    }
                    else if (uu != 1)
                    {
                        if (uu % 2 == 1)
                        {
                            int shu = uu / 2;
                            if (hh - shu >= 1 && hh - shu <= n&&hh + shu >= 1 && hh + shu <= n)
                            {
                                dt[summ].start = hh - shu;
                                dt[summ].end = hh + shu;
                                summ++;
                            }
                        }
                        if (hh % 2 == 1)
                        {
                            int xx = hh / 2;
                            if (xx - uu + 1 >= 1 && xx - uu + 1 <= n&&xx + uu >= 1 && xx + uu <= n)
                            {
                                dt[summ].start = xx - uu + 1;
                                dt[summ].end = xx + uu;
                                summ++;
                            }
                        }
                    }
                    uu = m / i; hh = i;
                    if (uu == 1)
                    {
                        if (m <= n)
                        {
                            dt[summ].start = hh;
                            dt[summ].end = hh;
                            summ++;
                        }
                        if ((hh - 1) % 2 == 0)
                        {
                            int x = (hh - 1) / 2;
                            if (x >= 1 && x <= n&&x + 1 >= 1 && x + 1 <= n)
                            {
                                dt[summ].start = x;
                                dt[summ].end = x + 1;
                                summ++;
                            }
                        }
                    }
                    else if (uu != 1)
                    {
                        if (uu % 2 == 1)
                        {
                            int shu = uu / 2;
                            if (hh - shu >= 1 && hh - shu <= n&&hh + shu >= 1 && hh + shu <= n)
                            {
                                dt[summ].start = hh - shu;
                                dt[summ].end = hh + shu;
                                summ++;
                            }
                        }
                        if (hh % 2 == 1)
                        {
                            int xx = hh / 2;
                            if (xx - uu + 1 >= 1 && xx - uu + 1 <= n&&xx + uu >= 1 && xx + uu <= n)
                            {
                                dt[summ].start = xx - uu + 1;
                                dt[summ].end = xx + uu;
                                summ++;
                            }
                        }
                    }
                }
            }
            sort(dt, dt + summ, cmp);
            for (i = 0; i < summ; i++)
            {
                if (i == 0) printf("[%d,%d]
    ", dt[i].start, dt[i].end);
                else if (i>0)
                {
                    if (dt[i].start != dt[i - 1].start || dt[i].end != dt[i - 1].end)
                        printf("[%d,%d]
    ", dt[i].start, dt[i].end);
                }
                
            }
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    Nginx使用
    MySQL 分区
    php PDO预处理
    php
    php
    linux 下编译安装MySQL
    php 工厂模式
    MySQL 权限管理
    hadoop集群安装20181016(20111130:前面太忙,没有写完,后面继续)
    JavaScript函数参数翻转——连接多个数组——zip、zipwith
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4472337.html
Copyright © 2011-2022 走看看