题意:
一个序列的第n项为3*n*(n-1)+1,而 n>=1,现在给一个正整数m,问其最少由多少个序列中的数组成?
思路:
首先,序列第1项是1,所以任何数都能构成了。但是最少应该是多少?对式子进行变形,6*(n*(n-1)/2)+1,看到了三角形数n*(n-1)/2,那么应该是6*(任意自然数)+x=m才对,因为最多只要3个三角形数就能组成任何自然数啦。
不妨试试m%6是多少?这样试图求x可以吗?因为任意自然数最多由3个组成,如果是k个,那么应该x>=k,别忘了还有个+1的项。x-k那部分,就只能由1来搞定了。
还有个前提,m%6=0怎么办?总不能由0个组成吧?那应该起码是1,所以(m-1)%6可以保证不为0。试试看m=13,则x=(13-1)%6+1=1,这样就真的能由1个序列中的数构成吗?序是1,7,19...好像没有。。。悲剧!应该是7+1+1+1+1+1+1才是,那6个1是补上去的。同理x=2也是需要保证序列中有两个数字能组成m才行,否则要x+=6才是答案。而3及以上就不用了,为什么我也不知道。。。
#include <bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=;
unordered_map<int,int> mapp;
vector<int > seq;
void pre_cal()
{
int t=;
for(int i=; i<&&t<=; i++)
{
t=*i*(i-)+;
mapp[t]=;
seq.push_back(t);
}
} bool cal(int m)
{
int q=, p=seq.size()-;
while(q<=p)
{
int t=seq[q]+seq[p];
if(t==m) return ;
if(t>m) p--;
else q++;
}
return ;
} int main()
{
//freopen("input.txt", "r", stdin);
int t, m;
pre_cal();
cin>>t;
while(t--)
{
scanf("%d",&m);
int k=(m-)%+;//k是不会超过6的。但是答案可能超过6。 if(k>=) printf("%d\n",k);
else if(k==)//特判
{
if(mapp[m]) printf("1\n");
else printf("%d\n",k+=);
}
else if(k==)//特判
{
if(cal(m)) printf("2\n");
else printf("%d\n",k+=);
}
}
return ;
}
AC代码
HDU 5312 Sequence (规律题)的更多相关文章
-
hdu 5312 Sequence(数学推导——三角形数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5312 Sequence Time Limit: 2000/2000 MS (Java/Others) ...
-
1005:Number Sequence(hdu,数学规律题)
Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...
-
hdu 5312 Sequence(数学推导+线性探查(两数相加版))
Problem Description Today, Soda has learned a sequence whose n-th (n≥) item )+. Now he wants to know ...
-
HDU 4279 Number-------找规律题
Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
-
HDU 1719 Friend 规律题
解题报告:规定数字1和数字2是Friend number,然后规定,若a和b是Friend number,那么a*b+a+b也是Friend number,输入一个数,让你判断这个数是否是Friend ...
-
hdoj--1005--Number Sequence(规律题)
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
-
UVa 1584 Circular Sequence --- 水题
UVa 1584 题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果 解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较 ...
-
HDU 3397 Sequence operation(线段树)
HDU 3397 Sequence operation 题目链接 题意:给定一个01序列,有5种操作 0 a b [a.b]区间置为0 1 a b [a,b]区间置为1 2 a b [a,b]区间0变 ...
-
LightOJ1010---Knights in Chessboard (规律题)
Given an m x n chessboard where you want to place chess knights. You have to find the number of maxi ...
随机推荐
-
plsql解决中文乱码以及问号问题
PLSQL执行sql语句,不识别中文,输出的中文标题显示成问号???? 输入sql语句select * from V$NLS_PARAMETERS查看字符集,查看第一行value值是否为简体中文 设置 ...
-
Leetcode 198 House Robber
You are a professional robber planning to rob houses along a street. Each house has a certain amount ...
-
poj 1062 昂贵的聘礼(最短路 dijk+枚举)
终于A 了,这题做着真麻烦 题目:http://poj.org/problem?id=1062 dijk 一般用于正权有向图 此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等 ...
-
Android应用程序消息处理机制(Looper、Handler)分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6817933 Android应用程序是通过消息来 ...
-
学习javascript中this用法的一些感悟
要想真正的掌握this,应该先要掌握javascript代码执行上下文环境的创建.转换和销毁机制:
-
关于在";a";标签中添加点击事件的一些问题
昨天做修改页面跳转时遇到一个问题,如果a标签的"href"属性为空的话,比如这样<a href="" onclick="roleupdate() ...
-
Spring详解(一)------概述
本系列教程我们将对 Spring 进行详解的介绍,相信你在看完后一定能够有所收获. 1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开 ...
-
.Net 从零开始构建一个框架之基本实体结构与基本仓储构建
本系列文章将介绍如何在.Net框架下,从零开始搭建一个完成CRUD的Framework,该Framework将具备以下功能,基本实体结构(基于DDD).基本仓储结构.模块加载系统.工作单元.事件总线( ...
-
(后端)解决code唯一码(java)简便方法
public String next() { long appBootTimes = systemVariableService.getAppBootTimes(); return Long.toSt ...
-
exec与match方法的区别
http://www.cnblogs.com/xiehuiqi220/archive/2008/11/05/1327487.html var someText= "web2.0 .net2. ...