1691: 找规律(二分快速求幂)
时间限制: 1 Sec 内存限制: 128 MB题目描述
给出四个数,前三个是某个数列的前三项,这个数列只可能是等差或者等比数列,然后让你求出某一项(每一项给出的第四个数),对200907取余的结果。
输入
输入包含多组测试数据,每组测试数据包含4个整数,前三个整数是数列的前三项,最后一个数是n,四个数的范围都是1~10^9
输出
输出这个数列的第n项%200907
样例输入
1 2 3 5 1 2 4 5
样例输出
5 16
这个题用的求余运算和快速幂取模运算,这两个自己都会,但是卡在了一个最不应该的细节上,没注意数的范围,没使用长整形变量,否则这个题也是很容易就解决了,不想再说自己什么了,有时候就是冷静不足,不知道造成了多少失误,今天算是给自己个教训吧,以后多长个心眼,多想想,别一见到题就a,也不检查就提交,只能自作自受。
#include<cstdio>
int main()
{
int a,b,c,n;long long d,q,s;
while(~scanf("%d%d%d%d",&a,&b,&c,&n))
{
if(a+c==2*b)
{
d=b-a;
s=(((n-1)%200907)*(d%200907)+a)%200907;//同余定理自己还是不够熟练,需要再理解理解
}
else
{
q=b/a;--n;s=a;
while(n>=1)//二分法快速幂运算
{
q%=200907;
if(n&1)
{
s*=q;
s%=200907;
--n;
}
if(n)
{
q*=q;
n>>=1;
}
}
}
printf("%lld\n",s);
}
return 0;
}
1689: 迷宫寻宝(bfs搜索)
时间限制: 1 Sec 内存限制: 128 MB
题目描述
迷宫寻宝。已知:若某人在位置(x, y),他下一次只能移动到(x-1, y)、(x+1, y)、(x, y-1)、(x, y+1)四个位置中的任一个(前提不能越界)。要求移动一步需要1分钟。请你帮他算出找到宝物所需要花费的最少时间。
迷宫是一个N*M的地图,图中只有四个数字。
0:空地,可以走
1:有障碍,不可以走
2:起点
3:宝物位置(只有一个宝物)
题目保证至少有一条路可以到达宝物位置。
输入
输入数据有多组。
每组以两个整数N和M开始,分别表示