【二分】POJ 2109】的更多相关文章

题目地址:http://poj.org/problem?id=2109 /* 题意:k ^ n = p,求k 1. double + pow:因为double装得下p,k = pow (p, 1 / n); 基础知识: 类型 长度 (bit) 有效数字 绝对值范围 float 32 6~7 10^(-37) ~ 10^38 double 64 15~16 10^(-307) ~ 10^308 long double 128 18~19 10^(-4931) ~ 10 ^ 4932 2. 二分查找…
题目链接: http://poj.org/problem?id=2109 参考: http://blog.csdn.net/code_pang/article/details/8263971 题意: 给定n,p,求k使得kn=p(1≤n≤200, 1≤p<10101, 1≤k≤109) 分析: 高精度+二分~~ k的位数为p的位数除以n的向上取整,这样知道k的位数便可以在范围内二分了~注意这里的答案是向下取整~~ 代码: #include<cstring> #include<cst…
谁骗我这是贪心TT 大概就是求k的n次方等于p时的k(k到10^9),由于,p的数据到了10^101,n到200,所以直接算估计T ?? 反正看完想到二分,其实数据要是再大点估计我这个二分不行. 网上有三种思路:     1.很自然的,因为觉得数据很大,会去想高精度(可以自己想,或者pow直接double数据还是挺小的).然后加二分猜数.     2.于是想到转换数学运算:指对互化.用double存,但是double 精确位只有6-7.而没有logx Y,只有先转化为以e为底的对数.用lognP…
Current work in cryptography involves (among other things) large prime numbers and computing powers of numbers among these primes. Work in this area has resulted in the practical use of results from number theory and other branches of mathematics onc…
import java.math.BigInteger; import java.util.Scanner; public class Main { static BigInteger p,l,r,div; static int n; public static int cmp(BigInteger mid){ BigInteger sum=mid.pow(n); return sum.compareTo(p); } public static BigInteger calc(){ l=BigI…
题目:http://poj.org/problem?id=2109 题意:求一个整数k,使得k满足kn=p. 思路:exp()用来计算以e为底的x次方值,即ex值,然后将结果返回.log是自然对数,就是e为底计算的.换底公式 log<a>(b) = log<c>(b) / log<c>(a). float 的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38: double 的范围为-2^1024 ~ +2^1023,也即-1.79E+…
1.Link: http://poj.org/problem?id=2109 http://bailian.openjudge.cn/practice/2109/ 2.Content: Power of Cryptography Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18872   Accepted: 9520 Description Current work in cryptography involves (…
题目链接:https://vjudge.net/problem/POJ-3273 把n个连续的数字划分成m个连续的部分,每个部分都有一个部分和(这个部分所有值加起来),现在要使划分里最大的那个部分和最小. 我用的也是二分,用二分枚举最大的部分和. 代码: #include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<map> #include&l…
Int最大是10^9.所以一般思路是二分+高精度.但是double 范围是10^(-307)-10^308所以可以用double型.k^n=p.所以有k=p^(1/n). 见代码: #include<stdio.h>#include<string.h>#include<iostream>using namespace std;#include<math.h> int main(){     double n, p;     while(cin >>…
[题目链接] http://poj.org/problem?id=3109 [题目大意] 在一个棋盘上放满白子,现在把一些白子变成黑子, 如果一个白子上下左右都有黑子,就会变成黑子,问最终黑子个数 [题解] 首先我们在每列的开头和结尾做标记,之后对行线扫描, 如果是列的开头,那么在该列中标记,如果是列的结尾,则在该列中去除标记 那么我们只要统计行的开头到行的结尾之间夹着多少列标记,且该列下该行没有原来的黑子 就是该行新增的黑子数量,对于总的黑子数量,可以用树状数组统计,之后容斥一下列标记即可.…