LightOJ 1282 Leading and Trailing

2024-05-12 19:32
文章标签 lightoj trailing 1282 leading

本文主要是介绍LightOJ 1282 Leading and Trailing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:求n^k的前三位和后三位。(n,k为大数)
分析:

后三位可以用快速幂得到(不足三位要补领0)。重点是求前三位。

n可以写成10^a(a为小数)的形式。因此 n^k = 10^(ak). 而ak可以写成x+y,其中x为ak的整数部分,y为ak的小数部分.其中x决定了位数,y决定了值。 因此只需求出y。 而n=10^a ,所以 a=log10(n)
这里用到了fmod函数,fmod(x,1)可以求出x的小数部分
因此用fmod(ak,1)即可求出y。

代码:

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;int quickmod(int n, int k, int mod)
{if(k == 1) return n%mod;long long t = quickmod(n, k/2, mod);long long ans = t * t % mod;if(k % 2 == 1) ans = ans * n % mod;return ans;
}
int main()
{int t, n, k; cin >> t;int kase = 1;while(t--){cin >> n >> k;int x = (int) pow(10.0, 2.0 + fmod(k * log10(1.0 * n),1));int y = quickmod(n, k, 1000);printf("Case %d: %d %03d\n", kase++, x, y);}return 0;
}


这篇关于LightOJ 1282 Leading and Trailing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983532

相关文章

LightOJ 1068 Investigation (数位dp)

http://www.lightoj.com/volume_showproblem.php?problem=1068 求出区间[A,B]内能被K整除且各位数字之和也能被K整除的数的个数。(1 ≤ A ≤ B < 231 and 0 < K < 10000) 算是最简单的数位dp了,k在这里是10000,三维数组都开不开。但是想想会发现A,B最多有10位,各位数字之和不会超过90,那么当

lightoj 1050 - Marbles (概率DP)

思路:定义dp[i][j] 为 袋子中有i个红球和j个红球时获胜的概率 那么根据题意我只可以任意拿而对手只拿蓝球。那么 dp[i][j] = (拿到红球的概率) * dp[i-1][j-1] + (拿到蓝球的概率) * dp[i][j-2]; 边界:当红球没有时,获胜的概率为1 注意点:T比较大,需要把所有数据预处理出来直接查询,否则超时 /*********************

lightoj 1047 Neighbor House(Dp)

思路:定义dp[i][j] 为粉刷第i个房子用的颜色j dp[i][j] = min(dp[i-1][(j+1)%3] , dp[i-1][(j+2) % 3]); 一共有三种颜色{0, 1, 2},任取一种颜色{j},那么和颜色j不同的颜色就为{(j + 1) % 3 , (j + 2) % 3}; /******************************************

lightoj 1044 Palindrome Partitioning(dp)

题意:给定字符串S,问可以划分的最小回文串数量 思路:定义dp[i]为以i开头的字符串中回文串的最小划分数. dp[i] = min(dp[j] + 1 | i <= j < n && S[i...j]是回文串) 边界,dp[i] = n-i+1. /************************************************ Author: fisty* Crea

lightoj 1037 - Agent 47 (状压DP)

题意:你现在需要消灭n个敌人,n个敌人的血量已知,你的普通攻击力为1,但是如果你杀死敌人i可以用它的武器去杀死其他敌人,p[i][j] 表示用敌人i的武器射杀敌人j会减p[i][j]滴血.问你最少可以攻击多少次可以将敌人杀死。 思路: 定义集合s为死亡敌人的集合。 dp[s] 为让集合为s的人死亡最小需要的攻击次数。 如果现在想要消灭敌人i 并且敌人i不属于s 那么dp[s | (1<<

lightoj 1032 - Fast Bit Calculations (数位DP)

记忆花搜索:dp[len][num][last] : 现在处理第len位,前面有num个11,并且最后一位为last。 /************************************************ Author: fisty* Created Time: 2015-08-18 20:18:09* File Name : 1032.cpp***************

UVA - 11029Leading and Trailing(快速幂取模取后三位 + log10()取前三位)

题目: UVA - 11029Leading and Trailing(快速幂取模取后三位 + log10()取前三位) 题目大意:给你N的k次方,然后要求你求出这个数的前三位和后三位。 解题思路:因为n和k都很大,这个数求出来是大数,所以可以用快速幂取模求后三位,因为后面的三位和前面的位数的没有关系。前面的三位比较难办。设x = log (n^k)  = k * log10(n)

[LightOJ 1292] Laser Shot (几何,判断共线)

LightOJ - 1292 刚开始写的时候是O( n3log(n) n^3log(n))的,枚举两个点,得到一条直线,用set记录下来,然后再 O( n n)地计数,居然没有卡过 orz 听了学长的教导,get到一个几何常用思路,正确解法如下 枚举一个点,再枚举其他点,计算到这个点的斜率,make_pair(dx,dy)塞到map里,把相同斜率的计数一下 这样时间复杂度为 O(n2log

[LightOJ 1364] Expected Cards (高维期望DP)

LightOJ - 1364 一副扑克牌,不断地从中抽牌 要求四种花色都至少要有给定的张数 其中如果抽到了王牌,可以将其变为任意花色 求满足条件时,抽出的期望张数 刚开始想错了,两张王牌并非在一开始就给定了 而是在游戏中可以视当前情况选择着变的 这两种方式是不一样的 由于牌数其实并不会很多, 复杂度乘一乘发现才 107 10^7级别的,所以直接暴力DP 将两张王牌当

[LightOJ 1342] Aladdin and the Magical Sticks (期望的线性性质+几何分布+邮票收集问题)

LightOJ - 1342 有 N根棍子,每根棍子都有一个权值 其中有若干根可识别的,若干根不可识别的 抽到了可识别的棍子,就不放回,抽到了不可识别的,就要放回 问所有棍子都至少被抽过一次后的期望权值和 根据期望的线性性, E(CX)=CE(X) E(CX) = CE(X) 所以可以对每根棍子求一下它被抽到的期望次数,再乘以它的权值 对于不可识别的棍子,由于它被抽到的概率