BAPC2014 I&&HUNNU11589:Excellent Engineers

题意:

对于我们已知的斐波那契数列,现在给出一个n,要我们求出一个新的斐波那契数列起始项,使得n能在新的斐波那契数列中,要求起始项y最小

思路:

我们知道

a3 = a1+a2

a4 = a1+2*a2

a5 = 2*a1+3*a2

a6 = 3*a1+5*a2

可以得到

an = fib[n-2]*a[1]+fib[n-1]*a[2]

然后我们只需要枚举就可以了,猜测a[2]不会超过10W,然后居然也过了

队友用数学方法解的,那个才是正解,暴力是邪门歪道,囧

http://blog.csdn.net/u010579068/article/details/47452185

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
using namespace std;

#define ls 2*i
#define rs 2*i+1
#define UP(i,x,y) for(i=x;i<=y;i++)
#define DOWN(i,x,y) for(i=x;i>=y;i--)
#define MEM(a,x) memset(a,x,sizeof(a))
#define W(a) while(a)
#define gcd(a,b) __gcd(a,b)
#define LL long long
#define ULL unsigned long long
#define N 100005
#define INF 0x3f3f3f3f
#define EXP 1e-8
#define rank rank1
const int mod = 1000000007;

LL fib[50]= {0,0,1};
LL n ;

int main()
{
    LL i,j,k;
    for(i = 3; i<50; i++)
    {
        fib[i] = fib[i-1]+fib[i-2];
    }
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%I64d",&n);
        int flag = 0;
        LL x,y,tz,ty;
        for(i = 45; i>2; i--)
        {
            for(ty=1; ty<=100000; ty++)
            {
                int tem = n-ty*fib[i];
                if(ty*fib[i]+fib[i-1]>n)
                    break;
                else if(tem%fib[i-1]==0&&tem/fib[i-1]<=ty)
                {
                    x = tem/fib[i-1];
                    y = ty;
                    flag = 1;
                    break;
                }
            }
            if(flag)
                break;
        }
        printf("%I64d %I64d\n",x,y);
    }

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 11:13:45

BAPC2014 I&&HUNNU11589:Excellent Engineers的相关文章

BAPC2014 E&amp;&amp;HUNNU11585:Excellent Engineers(线段树)

题意: 有n个程序员,每个程序员有三个能力值,当一个程序员三个能力值都小于另外一个程序员的时候,那么就可以淘汰那个程序员,问经过淘汰之后,还剩下几个程序员. 思路: 我们首先按照x排序,那么我们就只需要考虑y,z的情况了,这个时候可以用线段树,我们以y作为区间,以z作为值,每次查询只需要看1~y-1区间内是否已经存在小于z的值,如果存在,那么这个人就要淘汰 #include <iostream> #include <stdio.h> #include <string.h>

【线段树】BAPC2014 E Excellent Engineers

题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11668&courseid=0 题目大意: N个人,每个人有三个能力排名X Y Z,每种能力没有同名次,如果当前的人比在清单上的人中至少有一项能力都要优,则这个人也会被加到清单上. 求最终清单上有几个人.(N<=100000) 题目思路: [线段树] 首先按第三关键字排序,确定一

Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E. Excellent Engineers-单点更新、区间最值-线段树 G. Growling Gears I. Interesting Integers-类似斐波那契数列-递推思维题

先写这几道题,比赛的时候有事就只签了个到. E. Excellent Engineers 传送门: 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到名单中. 因为是3个变量,所以按其中一个变量进行sort排序,然后,剩下的两个变量,一个当位置pos,一个当值val,通过线段树的单点更新和区间最值操作,就可以把名单确定. 代码: 1 //E-线段树 2 #include<iostream> 3 #include<cstdio> 4 #incl

hdu 1785(You Are All Excellent)(数学函数atan2(y.x)返回(x,y)的反正切值)

You Are All Excellent Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2945    Accepted Submission(s): 1061 Problem Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望选拔出

SDJZU_新生_排序_You Are All Excellent(sort方法)

You Are All Excellent Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望选拔出最优秀的18人组成6支队伍来代表学校.但是,大家也知道,要想做到完全

XDOJ 1201: Dogs of Qwordance Senior Backend R&amp;D Engineers

XDOJ 1201: Dogs of Qwordance Senior Backend R&D Engineers 题目链接:http://acm.xidian.edu.cn/problem.php?id=1201 题目大意:已知长宽均为整数的矩形面积为$n$,现要在该矩形上划上水平和垂直间隔为相同整数的网格,问有多少种方案. 组合数 若将数$x$按素因数分解,可以得到$x=\prod_{i=0}^kp_i^{c_i}$,从而有$\tau(x)=\prod_{i=0}^k(c_i+1)$,其中$

excellent cushioning and also vitality go back with this boot

The particular manufactured fine mesh higher almost addresses the complete boot. Here is the sort of higher create in which blissfully permits the particular ft . to keep great and also dried up regardless how extended the particular work will be or

DB Query Analyzer 6.03, the most excellent Universal DB Access tools on any Microsoft Windows OS

?  ?DB Query Analyzer 6.03, the most excellent Universal database Access tools on any Microsoft Windows OS DB Query Analyzer is presented by Master Genfeng, Ma from Chinese Mainland. It has English version named 'DB Query Analyzer' and Simplified Chi

杭电 HDU ACM 1785 You Are All Excellent

 You Are All Excellent Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3874    Accepted Submission(s): 1270 Problem Description 本次集训队共有30多人参加,毫无疑问,你们都是很优秀的,但是由于参赛名额有限,只能选拔部分队员参加省赛.从学校的角度,总是希望