zoukankan      html  css  js  c++  java
  • [USACO1.4] Arithmetic Progressions

    定义双平方数为可以表示为两个自然数的平方和的数。要求找出双平方数集合中的所有等差数列。给定 (n) 为数列长度,(m)(p^2+q^2)(p,q) 的上界

    Solution

    首先筛出所有双平方数,然后枚举数列的第一项和第二项,暴力判断即可

    复杂度为 (O(nalpha(m^2)^2))

    #include <bits/stdc++.h>
    using namespace std;
    
    int n,m,isp[1000005];
    
    struct pii {
        int x,y;
        bool operator < (const pii &b) const {
            if(y==b.y) return x<b.x;
            return y<b.y;
        }
    };
    
    vector <pii> v;
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>n>>m;
        for(int i=0;i<=m;i++) {
            for(int j=0;j<=m;j++) {
                isp[i*i+j*j]=1;
            }
        }
        for(int i=0;i<=2*m*m;i++) {
            if(isp[i]==0) continue;
            for(int j=i+1;j<=min(2*m*m,4*m*m/n+i);j++) {
                if(isp[j]==0) continue;
                int d=j-i;
                int mx=i+(n-1)*d;
                if(mx>2*m*m) break;
                int flag=1;
                for(int k=3;k<=n;k++) {
                    int x=i+k*d-d;
                    if(isp[x]==0) {
                        flag=0;
                        break;
                    }
                }
                if(flag) v.push_back({i,d});
            }
        }
        sort(v.begin(),v.end());
        for(pii p:v) cout<<p.x<<" "<<p.y<<endl;
        if(v.begin()==v.end()) cout<<"NONE"<<endl;
    }
    
    
  • 相关阅读:
    Python学习笔记 for windows 二
    Socket.io:有点意思
    MEAN Stack:创建RESTful web service
    在EC2上安装MEAN环境
    NodeJS:树的序列化
    NodeJS:树的反序列化
    NodeJS学习:爬虫小探补完计划
    NodeJS学习:爬虫小探
    依赖包bcrypt安装Issues
    Mongoose:Schema之路
  • 原文地址:https://www.cnblogs.com/mollnn/p/12486300.html
Copyright © 2011-2022 走看看