前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【USACO 1.4】Arithmetic Progressions

【USACO 1.4】Arithmetic Progressions

作者头像
饶文津
发布2020-06-02 11:02:56
3210
发布2020-06-02 11:02:56
举报
文章被收录于专栏:饶文津的专栏
代码语言:javascript
复制
/*
TASK: ariprog
LANG:C++
URL:http://train.usaco.org/usacoprob2?a=PA9lOcZrdWq&S=ariprog
SOLVE:平方和最大为m*m*2,因此bq数组标记数i是否为平方和数,num数组存第i个平方和数
枚举公差q,从1到num[tol]/(n-1),枚举起点p,从num[1]到num[tol-1]
判断数p+i*q是否为平方和数
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
bool bq[200000];
int n,m,tol,found;
int p,q;
int num[200000];
int main() {
    freopen("ariprog.in","r",stdin);
    freopen("ariprog.out","w",stdout);
    scanf("%d%d",&n,&m);
    int cnt=0;
    for(int i=0;i<=m;i++)
        for(int j=i;j<=m;j++)
            bq[i*i+j*j]=1;
    for(int i=0;i<=m*m*2;i++)
        if(bq[i])num[++tol]=i;
    //printf("%d %d\n",tol,num[tol]);
    int up=num[tol]/(n-1);
//    printf("%d\n",up);
    for(q=1;q<=up;q++){
        for(int i=1;i<tol;i++){
            p=num[i];
            int ok=1;
            for(int j=1;j<n&&ok;j++)
                if(bq[p+j*q]==0)ok=0;
            if(ok){
                printf("%d %d\n",p,q);
                found=1;
            }
        }
    }
    if(!found)puts("NONE");
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档