hdu 5312 Sequence 三角形数
来源:互联网 发布:玄天问道源码单机论坛 编辑:程序博客网 时间:2024/05/17 08:41
这道题可以用三角形数的性质解出来,所谓三角形数就是n*(n-1)/2其中n>2。就是1,3,6,10……,也可以表示为
n*(n+1)/2。。。性质:任何一个正整数最多用三个三角形数就可以表示出来,这道题是3*n*(n-1)+1,就可以
表示为6*(n*(n-1)/2)+1,假如m需要k(k>=3)个数来表示,就相当于6*(k个三角形数的和)+k = m;所以
只要判断(m-k)%6是否等于0就可以了。需要一个或两个数的时候需要特判一下。通过这道题了解了三角形数的这个神性质
贴代码:
#include<stdio.h>#include<string.h>#include<stdlib.h>int n;int a[100005];int solve1(int m){for(int i=1; i<n; i++){if(a[i] == m)return 1;}return 0;}int solve2(int m){for(int i=1,j=n-1; i<n&&a[i]<m; i++){while(a[i]+a[j] > m)j--;if(a[i]+a[j] == m)return 1;}return 0;}int main(){int i,T,m;for(i=1; ; i++){a[i] = 3*(i-1)*i + 1;if(a[i]>1000000000){n = i;break;}}scanf("%d",&T);while(T--){scanf("%d",&m);int flag = 0;if(solve1(m)){ printf("1\n"); continue;}else if(solve2(m)){printf("2\n");continue;}else{for(i=3; i<=8; i++)//之所以循环到8的原因是因为模6的余数只有0-5六个,就是说i=9的情况跟i=3是一样的 {if((m-i)%6 == 0){printf("%d\n",i);flag = 1;break;}}}if(flag == 0)printf("-1\n");}}
0 0
- hdu 5312 Sequence 三角形数
- HDU 5312:Sequence 三角形数
- hdu 5312 Sequence(三角形数的利用)
- HDU 5312-Sequence(三角形数+推导)
- hdu 5312 Sequence(数学推导——三角形数)
- HDU 5312 Sequence(三角形数应用)——BestCoder 1st Anniversary ($)
- hdu 5312 三角形数 二分查找
- hdu5312 Sequence 三角形数的应用
- 三角形数
- 三角形数
- 三角形数
- 三角形数阵
- nit_241_三角形数
- 三角形数 南邮OJ 1032
- 南邮 OJ 1032 三角形数
- NOJ1032 三角形数(大数模板)
- HDU5312三角形数即6的倍数
- C++大数模板 --- NOJ1032 三角形数
- Windows 不能在 本地计算机 启动 SQL Server(MSSQLSERVER) 服务 错误代码126
- 排列组合
- 玩转Android---UI篇---ImageButton(带图标的按钮)
- 不同设备支持
- android XML : unbound prefix
- hdu 5312 Sequence 三角形数
- Android控件开发之Gallery3D效果
- RHEL7 下的systemd
- abap table control里面各种属性和事件的写法
- Class.getResource和ClassLoader.getResource的区别分析
- 线程异步信号
- 第一场训练赛UVALive 6907
- matlab如何求矩阵行列式
- 计蒜客第16题---爬楼梯