【题目描述】

A 学校的实验室新研制出了一种十分厉害的病毒。由于这种病毒太难以人工制造
了,所以专家们在一开始只做出了一个这样的病毒。
这个病毒被植入了特殊的微型芯片,使其可以具有一些可编程的特殊性能。最重
要的一个性能就是,专家们可以自行设定病毒的分裂能力K,假如现在有x 个病
毒,下一个分裂周期将会有Kx 个一模一样的病毒。你作为该实验室的数据分析
员,需要统计出在分裂到第N 个周期前,一共有多少个病毒单体进行了分裂。一
开始时总是只有一个病毒,这个局面算作第一个周期。由于答案可能很大,专家
们只需要你告诉他们对给定的P 取模后的答案。

【输入】

一行三个整数,依次是K, N, P。

【输出】

一行一个整数,你的答案(对P 取模) 。
输入样例一

   

样例一解释:第一个周期有1 个病毒,产生了一次分裂。第二个周期有1*5=5
个病毒,这五个病毒都会分裂。所以第三个周期前一共进行了1+5 等于6 次分裂。
答案即为6 mod 7 = 6。
输入样例二

   

【数据范围及提示】

测试点编号备注范围
1 ~ 5
P 是质数
1 < K, N, P < 10000
6 ~ 7 1 < N < 10^18
8 ~ 10 P不是质数1 < K , P < 2^31

【解法】

80分,乱搞+利用数据

我们知道这明显是等比数列求和,用公式直接搞,此外利用7(实际上能过8个)个数据点的p是质数的性质快速求逆元

#include <stdio.h>
#include <string.h>
#define maxbuff 1<<20
#define ll long long
#define set_file(File) freopen(File".in", "r", stdin), freopen(File".out", "w", stdout)
#define close_file() fclose(stdin), fclose(stdout)
char buff[maxbuff], *iter = buff;
template<class Type> inline void read(register Type &x)
{
x = 0;
while(*iter < '0' || *iter > '9') ++iter;
while(*iter >= '0' && *iter <= '9') x = x * 10 + *iter++ - '0';
}
ll k, n, mo, ans;
ll inv(ll n, ll p)
{
ll ret = 1;
for(ll i = p; i; i >>= 1, n = (n * n) % mo)
if(i & 1) ret = (ret * n) % mo;
return ret;
}
ll pow(ll n, ll t)
{
ll ret = 1;
for(; t; t >>= 1, n = (n * n) % mo)
if(t & 1) ret = (ret * n) % mo;
return ret;
}
int main()
{
set_file("split");
fread(buff, 1, maxbuff, stdin);
read(k), read(n), read(mo);
ans = pow(k, n - 1) - 1;
if(ans < 0) ans += mo;
ans = (ans * inv(k - 1, mo - 2)) % mo;
printf("%I64d\n", ans);
close_file();
return 0;
}

100分,一种不是很协调的方法。直接考虑保留分母的因子,也就是将mod数乘上个分母,之后加个快速乘加速

#include <stdio.h>
#include <string.h>
#define maxbuff 1<<20
#define ll long long
#define set_file(File) freopen(File".in", "r", stdin), freopen(File".out", "w", stdout)
#define close_file() fclose(stdin), fclose(stdout)
char buff[maxbuff], *iter = buff;
template<class Type> inline void read(register Type &x)
{
x = 0;
while(*iter < '0' || *iter > '9') ++iter;
while(*iter >= '0' && *iter <= '9') x = x * 10 + *iter++ - '0';
}
ll k, n, mo, ans, P;
ll mul(ll x, ll y)
{
ll ret = 0;
for(; y; y >>= 1, x = (x + x) % P)
if(y & 1) ret = (ret + x) % P;
return ret;
}
ll pow(ll n, ll t)
{
ll ret = 1;
for(; t; t >>= 1, n = mul(n, n))
if(t & 1) ret = mul(ret, n);
return ret;
}
int main()
{
set_file("split");
fread(buff, 1, maxbuff, stdin);
read(k), read(n), read(mo);
P = (k - 1) * mo;
ans = ((pow(k, n - 1) - 1 + P) % P/ (k - 1)) % mo;
printf("%I64d\n", ans);
close_file();
return 0;
}

  

[第一波模拟\day2\T1] {病毒分裂}(split.cpp)的更多相关文章

  1. [第一波模拟\day1\T2]{分班}(divide.cpp)

    [题目描述] 小N,小A,小T又大了一岁了. 现在,他们已经是高二年级的学生了.众所周知,高二的小朋友是要进行文理科分班考试的,这样子的话,三个好朋友说不定就会不分在一个班. 于是三个人决定,都考平均 ...

  2. Noip2011 提高组 Day1 T1 铺地毯 + Day2 T1 计算系数

    Day1 T1 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小 ...

  3. 【2018.06.26NOIP模拟】T1纪念碑square 【线段树】*

    [2018.06.26NOIP模拟]T1纪念碑square 题目描述 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一 ...

  4. Noip2014 提高组 Day1 T1 生活大爆炸版石头剪刀布 + Day2 T1 无线网络发射器选址

    Day1 T1 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升 ...

  5. 【2020.11.28提高组模拟】T1染色(color)

    [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

  6. [第一波模拟\day3\T3]{益智游戏}(game.cpp)

    [问题描述] 小P和小R在玩一款益智游戏.游戏在一个正权有向图上进行. 小P控制的角色要从A点走最短路到B点,小R控制的角色要从C点走最短路到D点. 一个玩家每回合可以有两种选择,移动到一个相邻节点或 ...

  7. [第一波模拟\day3\T2]{独立集}(bubble.cpp)

    [问题描述] 有一天,一个名叫顺旺基的程序员从石头里诞生了.又有一天,他学会了冒泡排序和独立集.在一个图里,独立集就是一个点集,满足任意两个点之间没有边.于是他就想把这两个东西结合在一起.众所周知,独 ...

  8. NOIP欢乐模拟赛 T1 解题报告

    小澳的方阵 (matrix.cpp/c/pas) [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑 ...

  9. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

随机推荐

  1. UML 图中类之间的关系:依赖,泛化,关联,聚合,组合,实现

    http://www.uml.org.cn/oobject/201211231.asp 1. 关联 一个类作为另外一个类的变量:在UML类图中,用实线连接有关联关系的对象所对应的类 2.聚合 表示整体 ...

  2. Vue不兼容IE8原因以及Object.defineProperty详解

    Vue不兼容IE8原因以及Object.defineProperty详解 原因概述: Vue.js使用了IE8不能模拟的ECMAScript5特性. Vue.js支持所有兼容ES5的浏览器. Vue将 ...

  3. 转--v$session & v$process各字段的说明【转载】

    Oracle 动态性能表 v$session & v$process 整理自google出来的网络资源.google是个好东东.没有google我会心神不宁. v$session SADDR: ...

  4. HBase备份恢复练习

    一.冷备 1.创建测试表并插入测试数据 [root@weekend05 ~]# hbase shell hbase(main):005:0> create 'scores','grade','c ...

  5. JSP九大内置对象的作用和用法总结【转】

    JSP九大内置对象的作用和用法总结?     JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.c ...

  6. 05.NopCommerce给Topic表添加排序及类别字段

    在用到Nopcommerce中静态页面表时,发现Topic表没有排序字段和类别字段,导致如果Page文件很多的话,无法区分是哪个类别,为此我稍微扩展了一下字段,在此记录一下操作流程,方便以后自己查看, ...

  7. 通用mapper的generator

    <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-genera ...

  8. CF779B(round 402 div.2 B) Weird Rounding

    题意: Polycarp is crazy about round numbers. He especially likes the numbers divisible by 10k. In the ...

  9. vue中引入字体图标报错,找不到字体文件

    在用vue + webpack进行开发的时候,在引用字体图标遇到字体无法加载的问题: 报以下错误 搞了好久没搞定,最后才找到解决方法(还是没有找到原因) 修改字体图标的css中引入字体文件的路径 以前 ...

  10. Java集合类工具CollectionUtils的操作方法

    集合判断: 例1: 判断集合是否为空:CollectionUtils.isEmpty(null): trueCollectionUtils.isEmpty(new ArrayList()): true ...