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


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

相关文章推荐

九度笔记之 1357:疯狂地Jobdu序列

题目1357:疯狂地Jobdu序列 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:529 解决:168 题目描述: 阳仔作为OJ的数据管理员,每一周的题目录入都让其很...

jobdu 26 括号匹配问题

题目描述:     在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左...

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

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

九度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 // // 无向图的最短路径 //...
  • Staibin
  • Staibin
  • 2014年03月07日 13:05
  • 685

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
  • 1389

JOBDU-OJ 1452 搬寝室

题目描述: 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的...

http://ac.jobdu.com/problem.php?pid=1029

题目描述:     哈利波特在魔法学校的必修课之一就是学习魔咒。据说魔法世界有100000种不同的魔咒,哈利很难全部记住,但是为了对抗强敌,他必须在危急时刻能够调用任何一个需要的魔咒,所以他需要你的...
  • cstur4
  • cstur4
  • 2012年10月22日 16:18
  • 400
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速幂 jobdu-1447
举报原因:
原因补充:

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