快速幂 jobdu-1447

原创 2016年08月31日 00:04:04

问题

看下面的问题: [ jobdu-1442]

题目描述:
Xinlv wrote some sequences on the paper a long time ago, they might be arithmetic or geometric sequences. The numbers are not very clear now, and only the first three numbers of each sequence are recognizable. Xinlv wants to know some numbers in these sequences, and he needs your help.
输入:
The first line contains an integer N, indicting that there are N sequences. Each of the following N lines contain four integers. The first three indicating the first three numbers of the sequence, and the last one is K, indicating that we want to know the K-th numbers of the sequence.
You can assume 0 < K <= 10^9, and the other three numbers are in the range [0, 2^63). All the numbers of the sequences are integers. And the sequences are non-decreasing.
输出:
Output one line for each test case, that is, the K-th number module (%) 200907.
样例输入:
2
1 2 3 5
1 2 4 5
样例输出:
5
16

思路

基本题,思路并不难。
要用到快速幂。
有一个要注意的点,中间过程有益处的可能性。小心!

代码

#include <iostream>
typedef long long ll;

ll arr[3];
const int MOD = 200907;

int fast_pow( ll a, ll b, int mod );

int main( void )
{
    int t = 0;
    std::cin >> t;
    while( t-- )
    {
        for( int i = 0; i < 3; ++i )
            std::cin >> arr[i];
        int k = 0;
        std::cin >> k;
        int ans = 0;
        if( arr[0] - arr[1] == arr[1] - arr[2] )
        {
            ans = (arr[0]%MOD + ((k-1)%MOD * (arr[1] - arr[0])%MOD)%MOD)%MOD;
        }
        else
        {
            ans = (arr[0]%MOD * fast_pow(arr[1]/arr[0], k-1, MOD))%MOD;
        }
        std::cout << ans << std::endl;
    }
    return 0;
}

int fast_pow( ll a, ll b, int mod )
{
    int ans = 1;
    ll w = a;// 这里小心,如果不是ll。可能 w%mod * w%mod这里就溢出了
    while(b)
    {
        if(b%2)
            ans = (ans * w)%mod;
        w = (w%mod * w%mod)%mod;
        b /=2 ;
    }
    return ans;
}

总结

改bug的时候如果感觉没有思路,哪怕不明确。但是有一点感觉就先试试,先把问题解决了再说。本体题目提示了数据范围较大,但是还是没有找到具体哪个过程的溢出。不妨先试试,找一个可能的方向。先把问题及时解决了,在回过头了看。


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

相关文章推荐

九度题目1447:最短路

题目描述: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场...

九度OJ-题目1447-最短路径-floyd-dijisitra

题目:http://ac.jobdu.com/problem.php?pid=1447 欢迎指正和讨论!题目描述:在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

九度OJ题目1447:最短路径(Dijstra 算法)

题目描述: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路...

九度 OJ 题目1447:最短路径(Floyd 算法)

题目描述: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路...

POJ 1784/EOJ 1447 Huffman's Greed 动态规划

本题给出了关键字k1,k2....kn并且k1 假如用e(i,j)表示ki,ki+1,ki+2...这几个关键字构成的最优搜索树的代价。这个状态可以怎么转移呢?现在我们有多种决策,即选择ki...kj...

九度:1447<最短路径><Floyd><Dijstra>

题目简单,为了讲解2中算法而设计。 http://ac.jobdu.com/problem.php?pid=1447 1. Floyd // 九度:1447 // // 无向图的最短路径 //...

Exploit for CVE-2008-1447 - Kaminsky DNS Cache Poisoning Attack (DNS中毒工具)

/* * Exploit for CVE-2008-1447 - Kaminsky DNS Cache Poisoning Attack * * Compilation: * $ gc...
  • yatere
  • yatere
  • 2011-05-14 03:50
  • 1337

jobdu 1103 二次方程计算器

//@auther zhou //@Number 201408070203 //@start time: //@finish time: /*@此处注意: 题目描述: 设计一个二次方程计算器 输入:...

JOBDU-OJ 1008 最短路径问题

题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 输入: 输入n,m,点的编号是1...

[Jobdu OJ] 1006 ZOJ问题

ZOJ问题
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)