nefu 84 五指山 (扩展欧几里得)
来源:互联网 发布:acr122u破解软件 下载 编辑:程序博客网 时间:2024/05/03 17:46
五指山
Time Limit 1000ms
Memory Limit 65536K
description
西游记中孙吾空大闹天宫,如来佛祖前来降伏他,说道:“我与你打个赌赛;你若有本事,一筋斗打出我这右手掌中,算你赢,再不用动刀兵苦争战,就请玉帝到西方居住,把天宫让你;若不能打出手掌,你还下界为妖,再修几劫,却来争吵。”那大圣闻言,暗笑道:“这如来十分好呆!我老孙一筋斗去十万八千里。他那手掌,方圆不满一尺,如何跳不出去?”急发声道:“既如此说,你可做得主张?”佛祖道:“做得!做得!”伸开右手,却似个荷叶大小。那大圣收了如意棒,抖擞神威,将身一纵,站在佛祖手心里,却道声:“我出去也!”你看他一路云光,无影无形去了。大圣行时,忽见有五根肉红柱子,撑着一股青气。他道:“此间乃尽头路了。这番回去,如来作证,灵霄殿定是我坐也。”翻转筋斗云,径回本处,站在如来掌:“我已去,今来了。你教玉帝让天宫与我。”如来骂道:“你正好不曾离了我掌哩!”大圣道:“你是不知。我去到天尽头,见五根肉红柱,撑着一股青气,我留个记在那里,你敢和我同去看么?”如来道:“不消去,你只自低头看看。”那大圣睁圆火眼金睛,低头看时,原来佛祖右手中指写着“齐天大圣,到此一游。”大圣大吃了一惊道:“有这等事!有这等事!我将此字写在撑天柱子上,如何却在他手指上?莫非有个未卜先知的法术?我决不信!不信!等我再去来!”好大圣,急纵身又要跳出,被佛祖翻掌一扑,把这猴王推出西天门外,将五指化作金、木、水、火、土五座联山,唤名“五行山”,轻轻的把他压住。 我们假设佛祖的手掌是一个圆圈(所以任凭大圣一个筋斗云十万八千里也是飞不出其手掌心),圆圈的长为n,逆时针记为:0,1,2,…,n-1,而大圣每次飞的距离为d.现在大圣所在的位置记为x,而大圣想去的地方在y。现在要你告诉大圣至少要多少筋斗云才能到达目的地。
input
有多组测试数据。第一行是一个正整数T,表示测试数据的组数。每组测试数据包括一行,四个非负整数,n(2 < n < 10^9),表示如来手掌圆圈的长度;d(0 < d < n),筋斗所能飞的距离;x(0 <= x < n),大圣的初始位置;y(0 <= y < n),大圣想去的地方。 注意孙悟空的筋斗云只沿着逆时针方向翻。
output
对于每组测试数据,输出一行,给出大圣最少要翻多少个筋斗云才能到达目的地。如果无论翻多少个筋斗云也不能到达,输出“Impossible”.
sample_input
23 2 0 23 2 0 1
sample_output
12
hint
source
思路:ad-tn=y-x
AC program:
#include<iostream>
#define DEBUG
using namespace std;
long long gcd(long long a,long long b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
long long fn(long long a,long long b,long long &x,long long &y)
{
if(b==1)
{
x=1;
y=1-a;
}
else
{
long long x1,y1;
fn(b,a%b,x1,y1);
x=y1;
y=x1-x*(a/b);
}
}
int main()
{
int test;
long long n,d,x,y,g,s,t,res;
cin>>test;
while(test--)
{
cin>>n>>d>>x>>y;
x=(y-x+n)%n;
g=gcd(d,n);
if(x%g!=0)
{
cout<<"Impossible"<<endl;
}
else
{
n=n/g;
d=d/g;
fn(d,n,s,t);
if(s<0)
s+=n;
res=(s*x/g)%n;
cout<<res<<endl;
}
}
//system("pause");
return 0;
}
CE program:(囧 nefu这个OJ这不给力,CE都不指出)
#include<iostream>
//#include<stdio.h>
//#include<string.h>
//#include<math.h>
//#include<algorithm>
using namespace std;
__int64 exgcd(__int64 a,__int64 b,__int64 &x, __int64 &y )
{
__int64 t,d;
if(b==0)
{
x=1;
y=0;
return a;
}
d=exgcd(b,a%b,x,y);
t=x;
x=y;
y=t-a/b*y;
return d;
}
int main()
{
int test;
cin>>test;
while(test--)
{
__int64 n,d,xx,yy,MM,ar,br;
cin>>n>>d>>xx>>yy;
MM=exgcd(d,n,ar,br);
__int64 tmp=(yy-xx+n)%n;
if(tmp%MM)
cout<<"Impossible"<<endl;
else
{
__int64 s=n/MM;
ar=ar*tmp/MM;
cout<<(ar%s+s)%s<<endl;
}
}
//system("pause");
return 0;}
- nefu 84 五指山 (扩展欧几里得)
- NEFU 84 五指山(扩展欧几里得)
- NEFU 84 五指山 扩展欧几里得算法
- nefu 84 五指山 拓展欧几里得
- nefu 84 五指山(扩展欧几里德)
- nefu-84-五指山(扩展欧几里德算法)
- Nefu 84 五指山【拓展欧几里得】入门
- nefu 84 五指山(扩展ou'ji'li)
- nefu 84 五指山 扩展欧几里得 I really want to see the "Making havoc in Heaven"
- 扩展欧几里德 之 五指山 nefu 84
- NEFU 84 扩展欧几里得
- nefu84 五指山(扩展欧几里得)
- NEFU 84 五指山(拓展欧几里德)
- NEFU 84 五指山
- NEFU 84 五指山
- nefu84 五指山(扩展欧几里得算法解同余方程)
- nefu 630 Min Chain(扩展欧几里得)
- NEFU 84 五指山 求解同余方程的最小解
- 只有三只酒杯,如何将酒平均分给4个人喝?
- GoldenGate for win安装配置
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- select函数(一)
- 设计模式-迭代器模式
- nefu 84 五指山 (扩展欧几里得)
- 做客户管理系统遇到的各种蛋筒问题
- cocos2d-x学习之设置精灵的触摸范围
- android第一天 的了解
- struts2 的查漏补缺知识点
- c++类型转换四种关键字
- JavaScript学习笔记(八) 基本类型包装器和Error对象
- 一个C#和C++执行效率对比的简单实例
- poj 3026 Borg Maze(prim+广搜)