ACM集训的Training Day 3的A题。。。

A. 等差数列

一.题目描述:

一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列。

在这个问题中a是一个非负的整数,b是正整数。写一个程序来找出在双平方数集合(双平方数集合是所有能表示成p的平方 + q的平方的数的集合,其中p和q为非负整数)S中长度为n的等差数列。

二.格式

时间限制: 5 秒

题目名称: ariprog

输入格式:

(file ariprog.in)

第一行: N(3<= N<=25),要找的等差数列的长度。

第二行: M(1<= M<=250),搜索双平方数的上界0 <= p,q <= M。

输出格式:

(file ariprog.out)

如果没有找到数列,输出“NONE”。

如果找到了,输出一行或多行, 每行由二个整数组成:a,b。 a为等差数列的第一个值,b为等差数列的公差。

这些行应该先按b排序再按a排序。

所求的等差数列将不会多于10,000个。

三.

样例输入:

5

7

样例输出:

1 4

37 4

2 8

29 8

1 12

5 12

13 12

17 12

5 20

2 24

分析:

对于限制时间比较宽松的这个题呀~~~~~暴力穷举就可以了~~~~~~

按照题意,先是确定所有的双平方数,然后根据给的上限,把范围内的双平方数储存起来。

(哎呀,好懒啊,不想写了=.=)

我的代码里有注释。。。以后有闲时间了再来补充吧。╮(╯▽╰)╭

不说了,上代码。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 bool is[125001];          //记录谁是双平方数的bool数组
 5 int a[125001];            //由于所给上限是250,则最大的数为250*250*2
 6 int main(){                                                      //n是给的等差数列的长度,top是所给公差上限
 7     int n,top,k=0,tole,num=0;                                    //k初始化为0,最后为的储存双平方数数组的总长度。
 8     scanf("%d%d",&n,&top);                                       //tole为公差 ,nu记录满足条件的数组的个数 ,用于判断是否在后面的bool f=0时
 9     for(int i=0;i<=top;i++)                                      //把所有的数是否是双平方数记录下来
10         for(int j=0;j<=top;j++)
11             is[i*i+j*j]=1;
12     for(int i=0;i<=top*top*2;i++)                               //把上限范围内的双平方数储存起来
13         if(is[i])
14             a[k++]=i;                                          //一共有k个数
15     int maxt=(top*top*2-0)/(n-1);                              //先定义公差为tole,maxt为公差的最大范围  num为记录等差数列的个数
16     for (tole=1;tole<=maxt;tole++){                            //l为公差 ,a[i]为首项
17         for(int i=0;a[i]+(n-1)*tole<=top*top*2&&i<k;i++){      //a[i]+(n-1)*l为第i项
18             bool f=1;
19             for(int j=1;j<n&&f;j++)                           //检查对于每个等差数列,它的每一项元素都在双平方数组中
20                 if(!is[a[i]+j*tole]){
21                     f=0;
22                 }
23             if(f){                                           //在经过对等差数列每一项检查后,f仍为真,则满足题意
24                 printf("%d %d\n", a[i],tole);                //满足条件的数列,输出首项和公差
25                 num++;                                       //num记录满足条件的数列的个数
26             }
27         }
28     }
29     if (!num)                                               //num为0,则输出NONE
30         printf("NONE");
31     return 0;
32 }
时间: 2024-08-04 19:16:23

ACM集训的Training Day 3的A题。。。的相关文章

acm集训训练赛(二)D题【并查集】

一.题目 Description There is a town with N citizens. It is known that some pairs of people are friends. According to the famous saying that ?The friends of my friends are my friends, too? it follows that if A and B are friends and B and C are friends th

yzm10的ACM集训小感

7月30号,ACM集训进行了两周,一切都已on the right way.这时的我适时地从题海中探出头,其实除了刷题,也该写点什么来总结下过去.首先,在第一周里,我学习了数据结构,知道了STL这么一个神奇的存在.不管是stack.queue亦或multiset,还有最具代表的priority_queue(习惯性地打上下划线..)有时候堆的logn真的能帮你优化不少时间.只需一个头文件,你就可以调用他们(美滋滋~).还有k学长讲的并查集也非常实用,区间合并用到cys学长share的next跳(类

七月23 ACM集训——最小生成树

prim算法模板 int  prim(int x){    int i,j,sum=0,min=M,k; memset(vit,0,sizeof(vit));    memset(dis,0,sizeof(dis));    for(i=1;i<=m;i++)        dis[i]=p[x][i];    dis[x]=0;    vit[x]=1;     for(i=1;i<m;i++)    {        min=M;        k=-1;        for(j=1;j

ACM: Gym 101047K Training with Phuket&#39;s larvae - 思维题

Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Practice Description standard input/output Thai cuisine is known for combining seasonings so that every dish has flavors that are s

acm集训训练赛A题【签到题】

一.题目 Description After winning gold and silver in IOI 2014, Akshat and Malvika want to have some fun. Now they are playing a game on a grid made of nhorizontal and m vertical sticks. An intersection point is any point on the grid which is formed by t

acm集训训练赛B题【排序+模拟】

一.原题 Description Being a programmer, you like arrays a lot. For your birthday, your friends have given you an array a consisting of ndistinct integers. Unfortunately, the size of a is too small. You want a bigger array! Your friends agree to give you

2015年暑期ACM集训总结

今年暑假学校照例进行了ACM的暑假集训,跟以往不同的是:今年我作为一个老队员站上了讲台,体验了一把当老师的感觉,给新队员讲解ACM系列知识. 在集训开始之前,我跟一个同学写了一个ACM的评测系统,啊,评测系统?高达上啊.其实不然,这个系统也没有想象的那么复杂,只能简单地评测程序的几种状态: Compile Error Runtime Error Time Limit Exceeded Wrong Answer Accepted 所写的评测系统,是一个线下的评测系统,即只能本地上交程序,然后评测,

七月25 ACM集训——kmp算法

字符串比配问题,通过引入next[]而使效率提高 关于next[]数组,是对模式串的特征来构造的: 为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀. 在匹配过程称,若发生不匹配的情况,如果next[j]>=0,则目标串的指针i不变,将模式串的指针j移动到next[j]的位置继续进行匹配:若next[j]=-1,则将i右移1位,并将j置0,继续进行比较. 具体思想: 根据定义next[0]=-1,

五一九天假期ACM集训记录【4月27日—第二天】

今天上午九点到下午两点,我们做了山东省第三届ACM原题,整体结果还比较不错,我们队做出了4道题,两道模拟,一道字符串处理,一道高数问题.比赛前期我们配合得不错,比较快速的A出了两道模拟题.但后来状态不太好,主要是我的问题,后来我做的是那道字符串处理的题目,有点麻烦,分割单词,然后在单词中提取数字,数字还不是标准的,做了好长时间,终于测试数据过了,提交了一下,结果果断地返回了一个WA,那种感觉太纠结了,就像当头一棒,千辛万苦弄出来的一个,还是WA,用来队友给我说得考虑空格,两个单词之间可能有一个或