博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USACO 1.4 等差数列
阅读量:6836 次
发布时间:2019-06-26

本文共 1444 字,大约阅读时间需要 4 分钟。

题目:https://www.luogu.org/problemnew/show/P1214

枚举前两项,计算即可

但是得有一个小优化:如果最后一项大于最大值,就直接退出

代码:

#include
#include
#include
#include
using namespace std;inline int read(){ int ans = 0,op = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') op = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { (ans *= 10) += ch - '0'; ch = getchar(); } return ans * op;}int a[250 * 250 * 4];bool ok[250 * 250 * 4];int n,m;int tot = 0;int ans = 0;struct node{ int a,b;}p[100001]; bool cmp(const node &k1,const node &k2) { return k1.b < k2.b || (k1.b == k2.b && k1.a < k2.a); }int main(){ bool o = 0; int ans = 0; n = read(),m = read(); for(int i = 0;i <= m;i++) for(int j = 0;j <= m;j++) if(ok[i * i + j * j] == 0) a[++tot] = i * i + j * j,ok[i * i + j * j] = 1; sort(a + 1,a + 1 + tot); for(int i = 1;i<= tot;i++) for(int j = i + 1;j <= tot;j++) { int b = a[j] - a[i]; //if(a[j] - (n - 2) * b < 0) break; if(a[j] + (n - 2) * b > 2 * m * m) break; bool flag = 1; for(int k = 1;k <= n - 1;k++) if(ok[a[i] + b * k] == 0) {flag = 0; break; } if(flag) p[++ans].a = a[i],p[ans].b = b,o = 1; } if(o == 0) {printf("NONE"); return 0;} sort(p + 1,p + 1 + ans,cmp); for(int i = 1;i <= ans;i++) printf("%d %d\n",p[i].a,p[i].b);}

 

转载于:https://www.cnblogs.com/LM-LBG/p/9973286.html

你可能感兴趣的文章
API编程的详细介绍(转)
查看>>
如何自定义一个优雅的ContentProvider
查看>>
地理定位Geolocation API
查看>>
asp.net mvc用jquery向action提交json列表数据
查看>>
mybatis 多个中间表查询映射
查看>>
Cannot find module '../lib/utils/unsupported.js'
查看>>
asp.net Treeview控件
查看>>
041_SQL逻辑查询语句执行顺序
查看>>
golang传参方式
查看>>
mongodb的windows系统下安装
查看>>
sql2005,sa登录失败
查看>>
如何提高上传带宽
查看>>
(转) Apache Shiro 使用手册(三)Shiro 授权
查看>>
linux EOF 写法梳理
查看>>
shift 参数移位
查看>>
同步锁
查看>>
Chromium Embedded Framework (CEF)_3.2171.2069_v20170606_x86.tar.xz
查看>>
jsp页面代码的加载顺序
查看>>
常用伪元素及content属性值的使用
查看>>
统计学习方法 李航---第1章 统计学习方法概论
查看>>