洛谷1214 等差数列 Arithmetic Progressions
来源:互联网 发布:年度十大网络流行语 编辑:程序博客网 时间:2024/05/20 21:22
m-sea-blog.com的服务器出问题了……等待修复ing QAQ
题目描述
一个等差数列是一个能表示成a, a+b, a+2b,…, a+nb (n=0,1,2,3,…)的数列。
在这个问题中a是一个非负的整数,b是正整数。写一个程序来找出在双平方数集合(双平方数集合是所有能表示成p的平方 + q的平方的数的集合,其中p和q为非负整数)S中长度为n的等差数列。
传送门
算法
这题不需要很高端的知识,枚举即可。
但是普通的枚举会超时,所以要加上一个剪枝:最后一个数超出上限就break。
而且要从大到小枚举。
枚举等差数列的后两项,然后计算出公差,然后减到第一项。
答案即第一项(减的剩余值)和公差。
注意到题目的输出方式,要自定义结构体重载<(敲cmp也可以)。
代码
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#define re registerusing namespace std;bool f[200010];int a[200010];inline bool cmp(const int& x,const int& y) { return x>y; } //从大到小排序struct stAns //答案{ int a,b; bool operator < (const stAns& x) const { //重载< return (b<x.b)||((b==x.b)&&(a<x.a)); }}ans[10010];int main(){ int n,m,num=0,ansnum=0; scanf("%d%d",&n,&m); //输入 for (re int i=0;i<=m;i++) for (re int j=0;j<=m;j++) { //计算双平方数,从0开始 int now=i*i+j*j; if (!f[now]) { num++; a[num]=now; f[now]=true; } //记得判是否出现 } sort(a+1,a+num+1,cmp); //排序 for (re int i=1;i<=num-n+1;i++) //最后一项 for (re int j=i+1;j<=num-n+2;j++) { //倒数第二项 int p=a[i]-a[j],find_ans=true,t=a[j]; //公差、有答案的标记、当前项 if (a[j]-(n-2)*p<0) break; //剪枝 for (re int k=1;k<=n-2;k++) { //循环n-2次,计算前面 t-=p; //算出前一项 if (t<0) { find_ans=false; break; } //<0,不成立 if (f[t]==0) { find_ans=false; break; } //不是双平方数,不成立 } if (find_ans) { //有答案就存 ansnum++; ans[ansnum].a=t; ans[ansnum].b=p; } } if (ansnum==0) printf("NONE\n"); //无答案就输出"NONE" else { sort(ans+1,ans+ansnum+1); //排序答案 for (re int i=1;i<=ansnum;i++) printf("%d %d\n",ans[i].a,ans[i].b); //输出 } return 0;}
阅读全文
0 0
- 洛谷1214 等差数列 Arithmetic Progressions
- 洛谷 P1214 [USACO1.4] 等差数列 Arithmetic Progressions
- Arithmetic Progressions等差数列
- [USACO1.4]等差数列 Arithmetic Progressions
- USACO1.4 等差数列 Arithmetic Progressions
- [USACO1.4]等差数列 Arithmetic Progressions
- 【数论】洛谷 P1214 [USACO1.4]等差数列 Arithmetic Progressions
- Usaco 1.4.3 等差数列(Arithmetic Progressions)
- 【模拟枚举】Arithmetic Progressions等差数列(Usaco_Training 1.4)
- USACO:1.4.3 Arithmetic Progressions 等差数列 解析
- USACO 1.4 Arithmetic Progressions (等差数列)
- P1214 [USACO1.4]等差数列 Arithmetic Progressions
- [USACO1.4]等差数列Arithmetic Progressions 枚举
- 【USACO题库】1.4.3 Arithmetic Progressions等差数列(模拟)
- 1251. 【USACO题库】1.4.3 Arithmetic Progressions等差数列
- Arithmetic Progressions
- Arithmetic Progressions
- Arithmetic Progressions
- txt文件读写
- 数据结构——栈—表达式求值
- VC 实现注册表监控
- mongodb的查询过程
- nodejs使用mongoose 获取mongodb 数据格式化问题
- 洛谷1214 等差数列 Arithmetic Progressions
- Java后台框架篇--Struts2.0简介与原理
- 阿里云 Ubuntu 编译安装 Nginx 及拓展支持
- HDU Safecracker 1015(dfs入门)
- [三分] Weakness
- glusterfs 3.4.2安装记录(一)
- 探讨MySql中的空值和Null的异同
- Java-Collection源码分析(十二)——Set、AbstractSet、HashSet和LinkedHashSet
- Coursera Deep Learning 第2课 Improving Deep Neural Networks 第一周 测验题 Practical aspects of deep learning