2015 Benelux Algorithm Programming Contest I- Interesting Integers
题目大意:给你一个数字n(n<=1e9) ,让你求一个能包含这个数的斐波那契数列的第一项a
和第二项b,找出b最小的那个。
帮我复习了一下扩展欧几里得。。。。
思路:a,b,a+b,a+2b……我们能枚举出50项内,每一项的a和b的数量,然后就是从后往前解
二元一次方程。 其实以a为第一项,b为第二项的斐波那切数列公式为,a[ i ]=f[ i - 1 ] * x+f[ i ]*y。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll inf=1e18;
ll fi[],se[],n,a,b,ans1,ans2,res1,res2;
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==)
{
x=; y=;
return a;
}
else
{
ll gcd,t; gcd = exgcd(b,a%b,x,y);
t=x; x=y; y=t-(a/b)*y;
return gcd;
}
}
bool work(ll fi,ll se,ll n,int id)
{
if(fi>n || se>n) return false;
ll x,y,gcd=exgcd(fi,se,x,y);
if(n%gcd!=) return false;
ll g=n/gcd;
x=x*g; y=y*g;
ll change1=fi/gcd;
ll change2=se/gcd;
if(x<)
{
ll cnt=(-x)/change2;
x+=cnt*change2;
y-=cnt*change1;
if(x<)
{
x+=change2;
y-=change1;
}
if(y<) return false;
}
else if(y<)
{
ll cnt=(-y)/change1;
x-=cnt*change2;
y+=cnt*change1;
if(y<)
{
x-=change2;
y+=change1;
}
if(x<) return false;
}
if(x<=y)
{
ll cnt=(y-x)/(change1+change2);
x+=cnt*change2;
y-=cnt*change1;
if(x>y || y<)
{
x-=change2;
y+=change1;
}
}
else
{
ll cnt=(x-y)/(change1+change2);
x-=cnt*change2;
y+=cnt*change1;
if(x>y)
{
x-=change2;
y+=change1;
}
if(x< || y<) return false;
}
if(x< || y< || x>y) return false;
res1=x; res2=y;
return true;
}
int main()
{
ll x,y;
fi[]=;se[]=;fi[]=;se[]=;
for(int i=;i<=;i++)
{
fi[i]=fi[i-]+fi[i-];
se[i]=se[i-]+se[i-];
}
int T; scanf("%d",&T);
while(T--)
{
scanf("%I64d",&n);
ans1=ans2=inf;
for(int i=;i>=;i--)
{
if(work(fi[i],se[i],n,i))
{
if(res2<ans2)
{
ans2=res2;
ans1=res1;
}
else if(res2==ans2 && res1<ans1)
{
ans2=res2;
ans1=res1;
}
}
}
printf("%I64d %I64d\n",ans1,ans2);
}
return ;
}
2015 Benelux Algorithm Programming Contest I- Interesting Integers的更多相关文章
- 2015 Benelux Algorithm Programming Contest E-Excellent Engineers
题目大意:有n个人,每个人都有三个物品,排名分别为a[ i ],b[ i ],b[ i ],现在要删掉其中的一些人 如果一个人x的三个物品的排名为a[ x ],b[ x ],b[ x ],若存在另一个 ...
- 2015 Benelux Algorithm Programming Contest (BAPC 15)E - Excellent Engineers
这题想了很久没思路,不知道怎么不sort维护二维的最小值 emmmm原来是线段树/树状数组,一维sort,二维当成下标,维护三维的最小值 #include<bits/stdc++.h> # ...
- 计蒜客 28319.Interesting Integers-类似斐波那契数列-递推思维题 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 I)
I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个 ...
- Benelux Algorithm Programming Contest 2014 Final(第二场)
B:Button Bashing You recently acquired a new microwave, and noticed that it provides a large number ...
- Benelux Algorithm Programming Contest 2014 Final
// Button Bashing (bfs) 1 #include <iostream> #include <cstdio> #include <cstring> ...
- 2014 Benelux Algorithm Programming Contest (BAPC 14)E
题目链接:https://vjudge.net/contest/187496#problem/E E Excellent Engineers You are working for an agency ...
- 2020.3.14--训练联盟周赛 Preliminaries for Benelux Algorithm Programming Contest 2019
1.A题 题意:给定第一行的值表示m列的最大值,第m行的值表示n行的最大值,问是否会行列冲突 思路:挺简单的,不过我在一开始理解题意上用了些时间,按我的理解是输入两组数组,找出每组最大数,若相等则输出 ...
- 计蒜客 28317.Growling Gears-一元二次方程的顶点公式 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 G)
G. Growling Gears 传送门 此题为签到题,直接中学的数学知识点,一元二次方程的顶点公式(-b/2*a,(4*a*c-b*b)/4*a):直接就可以得到结果. 代码: #include& ...
- 计蒜客 28315.Excellent Engineers-线段树(单点更新、区间最值) (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 E)
先写这几道题,比赛的时候有事就只签了个到. 题目传送门 E. Excellent Engineers 传送门 这个题的意思就是如果一个人的r1,r2,r3中的某一个比已存在的人中的小,就把这个人添加到 ...
随机推荐
- C#字体与Rectangle简单对应关系
在1920*1080 无缩放分辨率下,Rectangle要至少是字体的2倍+2才不会被遮挡.
- java实现网页验证码
Servlet: package cn.bdqn.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletExceptio ...
- zabbix 源码分析 another/first network error wait for 15s seconds 出现原因及调优建议
在监控设备的时候,在server端的日志中有时候会见到类似another network error, wait for 15s seconds的异常,今天我们看下这个问题的出现原因和解决方案: 问题 ...
- C#的五种访问修饰符
简述: 所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们. 可使用访问修饰符指定声明类型或成员的可访问性. 在C#语言中,共有五种访问修饰符:publ ...
- Android Retrofit 2.0使用
实例带你了解Retrofit 2.0的使用,分享目前开发Retrofit遇到的坑和心得. 添加依赖 app/build.gradle 1 compile 'com.squareup.retrofit2 ...
- POI导出Excel(xls、xlsx均可以,也支持图片)——(三)
Jar包
- Dubbo多版本
当服务提供者提供的服务接口出现不兼容升级时,可以设置版本号,使用多个版本号(version)进行过渡. 1).服务提供者配置文件 <dubbo:service ref="userSer ...
- Windows系统FTP Shell
ftp open 10.0.0.0.2 21101 user passwd ls cd pwd delete get /home/err.log Error.log put err.log /home ...
- 利用capability特征加强Linux系统安全【转】
转自:https://blog.csdn.net/fivedragon/article/details/676849 1.简介 UNIX是一种安全操作系统,它给普通用户尽可能低的权限,而把全部的系统权 ...
- 出现“error LNK1169: 找到一个或多个多重定义的符号”的原因
或许,有人真的会这样写程序吧...所以才会碰到如下哥们提出的问题. https://zhidao.baidu.com/question/131426210.html 出现这种问题的原因链接中的最佳答案 ...