Prime Number(CodeForces-359C)【快速幂/思维】
题意:已知X,数组arr[n],求一个分式的分子与分母的最大公因数。分子为ΣX^arr[i],分母为X^Σarr[i],数组为不递减序列。
思路:比赛的时候以为想出了正确思路,WA掉了很多发,看了别人写的代码才发现自己漏掉很多细节。
1.容易想到,分子的最低次幂即可能为所需答案
2.由于arr里存在相同的数,因此分子的各个幂存在可以合并同类项的情况,所以应该先彻底完成合并同类项,再进行步骤1。
3.一个小技巧,并不需要完成所有项的合并,当且仅当当前最小项的系数可以被X整除时才需要继续合并,否则当前项的次数即为答案所需次数。
特别需要注意的是:完成合并后,分子的最低次幂的次数是有可能大于分母的次数的,所以应该取二者的较小值作为答案的次数。
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
const int mo=1e9+;
int x;
int mpow(long long xx,long long nn){
long long res=;
while(nn!=){
if(nn&){
res=res*xx%mo;
}
nn>>=;
xx=xx*xx%mo;
}
return res;
} int main(){
int n;
long long num=,arr[];
scanf("%d%d",&n,&x);
for(int i=;i<=n;i++){
scanf("%I64d",&arr[i]);
num+=arr[i];
}
for(int i=;i<=n;i++){
arr[i]=num-arr[i];
}
for(int i=;i<=(n/);i++){
swap(arr[i],arr[n-i+]);
}
int sum=;
long long ans;
arr[n+]=-;
for(int i=;i<=n+;i++){
if(arr[i]==arr[i-]){
sum++;
}
else {
if(sum%x==){
sum/=x;
arr[--i]++;
}
else {
ans=arr[i-];
break;
}
}
}
ans=min(ans,num);
printf("%d",mpow(x,ans));
return ;
}
By xxmlala
Prime Number(CodeForces-359C)【快速幂/思维】的更多相关文章
- Prime Number CodeForces - 359C (属于是数论)
Simon has a prime number x and an array of non-negative integers a1, a2, ..., an. Simon loves fracti ...
- Codechef Eugene and big number(矩阵快速幂)
题目链接 Eugene and big number 题目转化为 $f(n) = m * f(n - 1) + a$ $f(n + 1) = m * f(n) + a$ 两式相减得 $f(n + 1) ...
- Yet another Number Sequence 矩阵快速幂
Let’s define another number sequence, given by the following function: f(0) = a f(1) = b f(n) = f(n ...
- UVA - 10689 Yet another Number Sequence 矩阵快速幂
Yet another Number Sequence Let’s define another number sequence, given by the foll ...
- Yet Another Number Sequence——[矩阵快速幂]
Description Everyone knows what the Fibonacci sequence is. This sequence can be defined by the recur ...
- HDU 1005 Number Sequence(矩阵快速幂,快速幂模板)
Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...
- HDU - 1005 Number Sequence 矩阵快速幂
HDU - 1005 Number Sequence Problem Description A number sequence is defined as follows:f(1) = 1, f(2 ...
- HDU - 1005 -Number Sequence(矩阵快速幂系数变式)
A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) m ...
- CodeForces 185A 快速幂
一开始找矩阵快速幂的题来做时就看到了这题,题意就是让你求出如图所示的第n个三角形中指向向上的小三角形个数.从图中已经很容易看出递推关系了,我们以f[n]表示第n个大三角形中upward的小三角形个数, ...
随机推荐
- masm for windows2015 下载安装
下载地址: https://sm.myapp.com/original/Office/wasm2015.rar
- Memcached 之在win10上的安装
一.下载 http://static.runoob.com/download/memcached-win64-1.4.4-14.zip 二.安装 memcached <1.4.5 版本安装 1. ...
- Wamp win10 1077error
检查日志发现了1077错误 State of services: The service 'wampapache64' is NOT started EXIT error code:1077 He ...
- Mysql表的横向拆分与纵向拆分
表的拆分分为横向拆分(记录的拆分)和纵向拆分(字段的拆分).拆分表的目的:提高查询速度. 1.横向拆分 我们从一个案例去解释,情景是这样的:某某博客,有50W的博客量,有2w的用户,发现随着用户和博客 ...
- 5.性能测试工具比较:Jmeter和LR
性能测试工具较多,无法一一进行介绍,感兴趣者可自行搜索资料学习.需要说明的是工具使用方法和原理都大同小异,掌握一个,其他皆可快速上手. 下面就以服务端的性能测试工具为例,对市场上最常用,知名度较高,也 ...
- Android检测服务是否运行
直接上代码: /** * 判断服务是否后台运行 * * @param context * Context * @param className * 判断的服务名字 * @return true 在运行 ...
- mac 终端杀进程
killall 进程名 killall chromedriver 查看进程名的·方法:
- Python实现按照指定要求逆序输出一个数字的方法
Python实现按照指定要求逆序输出一个数字的方法 这篇文章主要介绍了Python实现按照指定要求逆序输出一个数字的方法,涉及Python针对字符串的遍历.判断.输出等相关操作技巧,需要的朋友可以参考 ...
- sql注入02
第一关:基于错误的get单引号字符型注入 第二关:基于错误的get整形注入 第三关:基于错误的get单引号变形字符型注入 第四关:基础错误的双引号字符型注入 第五关: 第六关 第七关:导出文件get字 ...
- Zookeeper 记录
本文主要是学习记录: 部分内容为 <从Paxos到Zookeeper> 部分内容为 zookpper 原理分析 https://www.cnblogs.com/leesf456/p/ ...