zoukankan      html  css  js  c++  java
  • PROB Arithmetic Progressions

    实践证明:剪枝是很能节约时间的!!!!!!!!

    神哇~~~~~~~~~~~

    (1)在判断 a+ i*b时候直接break内层循环,就一下次通过了test7 但是悲剧的是还是通不过test 8

    (2)实在没辙了,只要看别人的答案,结果竟然是在判断是否符合条件的时候从后向前查看,也就将循环从是a到 a+(n-1)b从改为a + (n -1)b到a。结果竟然通过了!!!

    网上的资料说这样子看的话,是因为后面的数据比较稀疏(为什么?还是不懂)

    总而言之,题目不是很难,但是时间限制很给力,很折腾~

    代码如下:

    /*
    ID: foryjus1
    PROG: ariprog
    LANG: C++
    */
    //超时………………………………………………
    #include <iostream>
    #include <fstream>
    using namespace std;

    #define MAXMAP (2 * 251 * 251)

    bool map[MAXMAP] = {false};//考虑取0的情况,建立映射表,用于n判断是否是p^2+q^2

    int main()
    {
        ifstream fin("ariprog.in");
        ofstream fout("ariprog.out");
        int n, m;//n:等差数列长度;m:p、q的最大值
        fin >> n >> m;

        //初始化map
        for(int i = 0; i <= m; ++i)
        {
            for(int j = 0; j <= i; ++j)
            {
                map[ (i * i) + (j * j) ] = true;
            }
        }
        int bound = m*m + m*m;//a + nb最大值
        int maxb = (m*m + m*m) / (n - 1);//等差数列可能的最大的差
        bool flag = true;
        bool fgnone = true;//结果集合是否为空
        int temp;//用于存放临时值
        int abound;//a的边界
        for(int b = 1; b <= maxb; ++b)
        {
            abound = bound - ( n - 1 ) * b;//计算a的最大值
            for(int a = 0; a <= abound; ++a)
            {
                flag = true;
                //连续n个等差数列值           
                //for(int i = 0; i < n; ++i)
                //从后面开始查看
                for(int i = n - 1; i >= 0; --i)
                {
                    temp = a + i * b;
                    if(!map[temp])
                    {
                        flag = false;
                        break;
                    }
                }
                if(flag)
                {
                    //显示结果
                    fgnone = false;
                    fout << a << ' ' << b << endl;
                }
            }
        }
        //结果集为空,输出NONE
        if(fgnone)
        {
            fout << "NONE" << endl;
        }
        return 0;
    }

  • 相关阅读:
    STM32F4 SPI双机通讯调试总结
    Altium Designer (DXP) 复制粘贴,放器件 出错报异常的原因
    C++中一个0xC0000005访问冲突问题
    将Windows 7安装到移动固态硬盘(U盘)
    Delphi 的TStringBuilder防止服务器内存碎片化
    Delphi XE5的Android开发平台搭建
    利用RTTI实现Delphi的多播事件代理研究
    博客即将同步至 OSCHINA 社区
    用太极拳讲分布式理论,真舒服!
    记录一次C#调用Delphi编写Dll程序过程
  • 原文地址:https://www.cnblogs.com/growup/p/1989665.html
Copyright © 2011-2022 走看看