acm-纪念邮票
来源:互联网 发布:投资新手 知乎 编辑:程序博客网 时间:2024/06/15 20:47
纪念邮票
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
邮局最近推出了一套纪念邮票,这套邮票共有 N 张,邮票面值各不相同,按编号顺序为1分,2分,···,N分。
小杭是个集邮爱好者,他很喜欢这套邮票,可惜现在他身上只有M 分,并不够把全套都买下。他希望尽量买,最好刚好花光所有钱。作为一个集邮爱好者,小杭也不想买的邮票编号断断续续。所以小杭打算买面值 a 分至 b 分的 b-a+1 张连续的邮票,且总价值刚好为 M 分。
你的任务是求出所有符合要求的方案,以[a,b]的形式输出。
- 输入
- 输入只有一行,包含两个数N和M(1≤N,M≤10^9)。
- 输出
- 输出每行包含一个合法方案:[a,b]。按a值从小到大输出。
输出结果不包含任何空格。 - 样例输入
20 15
- 样例输出
[1,5][4,6][7,8][15,15]
- 来源
GDKOI 2006
我的代码:
首先我们要考虑到这是一个等差数列,只需要满足(a+b)*(b-a+1)/2==m就可以了,所以也就是2*m=(a+b)*(b-a+1),所以只需要找到有多少对数x=(a+b),y=(b-a+1),能够使x*y==2*m,然后使得:b<=n&&(a+b)*(b-a+1)==2*m就可以了,here we go:
#include<stdio.h>#include<math.h>int main(){int n,m;scanf("%d %d",&n,&m);for(int i=sqrt(2*m);i>=1;i--){if((2*m)%i==0){int x=2*m/i;int y=i;int a=(x-y+1)/2;int b=(x+y-1)/2;if(b<=n&&(a+b)*(b-a+1)==2*m)printf("[%d,%d]\n",a,b); }}return 0;}
- acm-纪念邮票
- 纪念邮票
- 1218. 纪念邮票
- 1218. 纪念邮票
- 纪念邮票问题
- nyoj794纪念邮票
- 1218.纪念邮票
- 1218.纪念邮票
- Sicily 1218 纪念邮票
- sicily 1218纪念邮票
- soj 1218 纪念邮票
- sicily 1218. 纪念邮票
- sicily 1218. 纪念邮票
- Sicily 1218. 纪念邮票
- SSL1475 纪念邮票(math)
- GDKOI2006 纪念邮票 PASCAL
- ACM
- acm
- fedora 18 下安装 sublime text 2
- PHPdocument2 安装及使用教程
- 信息or存储
- CvMat的用法详解及实例
- 向量旋转算法之----海豚算法
- acm-纪念邮票
- (11)MATLAB PCA+SVM 人脸识别
- mysql的bin-log日志
- 串口的状态
- 实现像百度一样的自动补全功能
- pongo(英雄会)题解之人人code,整数取反
- WinForm提示建议小工具【keydown\keyup\keypress】
- Sample 3.7: bondini.cpp
- 数据同步