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

    预处理全部q2+p2有20000多个。

    枚举任意两个的差,并以这个差扩展找到连续的有几个

    为了避免重复浪费时间,只需判断无法向左扩展的一对数,具体见代码。

    //#pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<iostream>
    #include<sstream>
    #include<cmath>
    #include<climits>
    #include<string>
    #include<map>
    #include<queue>
    #include<vector>
    #include<stack>
    #include<set>
    using namespace std;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int,int> pii;
    #define pb(a) push(a)
    #define INF 0x1f1f1f1f
    #define lson idx<<1,l,mid
    #define rson idx<<1|1,mid+1,r
    #define PI  3.1415926535898
    template<class T> T min(const T& a,const T& b,const T& c) {
        return min(min(a,b),min(a,c));
    }
    template<class T> T max(const T& a,const T& b,const T& c) {
        return max(max(a,b),max(a,c));
    }
    void debug() {
    #ifdef ONLINE_JUDGE
    #else
    
        freopen("d:\in1.txt","r",stdin);
        freopen("d:\out1.txt","w",stdout);
    #endif
    }
    int getch() {
        int ch;
        while((ch=getchar())!=EOF) {
            if(ch!=' '&&ch!='
    ')return ch;
        }
        return EOF;
    }
    
    const int M = 255;
    
    int Set[M*M*2];
    int bisquares[M*M];
    int n,m;
    
    struct result
    {
        int a,b;
        result(int a=0,int b=0):a(a),b(b){}
        bool operator < (const result &ant) const
        {
            if(b!=ant.b)return b<ant.b;
            else return a<ant.a;
        }
    }res[11000];
    int init()
    {
        memset(Set,0,sizeof(Set));
    
        for(int i=0;i<=m;i++)
        {
            for(int j=0;j<=m;j++)
                Set[i*i+j*j]=1;
        }
        int num=0;
        for(int i=0;i<=m*m*2;i++)
        {
            if(Set[i])
                bisquares[num++]=i;
        }
        return num;
    }
    
    int check(int a,int b)
    {
        while(a+b<=m*m*2&&Set[a+b])
        {
            a+=b;
        }
        return a;
    }
    int main()
    {
        freopen("ariprog.in","r",stdin);
        freopen("ariprog.out","w",stdout);
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            int num = init();
            int k=0;
            for(int i=0;i<num;i++)
            {
                for(int j=i+1;j<num;j++)
                {
                    int b=bisquares[j]-bisquares[i];
                    int pre=bisquares[i]-b;
                    if(pre>=0&&Set[pre])continue;
                    int x=check(bisquares[j],b);
                    for(int a=bisquares[i];a+(n-1)*b<=x;a+=b)
                        res[k++]=result(a,b);
                }
            }
            sort(res,res+k);
            if(k==0)
                printf("NONE
    ");
            else
                for(int i=0;i<k;i++)
                    printf("%d %d
    ",res[i].a,res[i].b);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Drawable和Bitmap的区别
    Android中的Drawable资源
    了解Objective-C中NSAutoreleasePool使用方法
    Object-C 内存管理及对象
    事件类型: 错误 事件来源: Service Control Manager 事件种类: 无 事件 ID: 7000
    HTML xmlns
    asp.net(C#)清除全部Session与单个Session
    Html学习笔记---html5表单元素
    jquery学习笔记---jquery事件($.event.special )
    C#学习笔记---Dispose(),Finalize(),SuppressFinalize
  • 原文地址:https://www.cnblogs.com/BMan/p/3557925.html
Copyright © 2011-2022 走看看