2019牛客暑期多校训练营(第五场)B.generator 1
传送门:https://ac.nowcoder.com/acm/contest/885/B
题意:给出,由公式
求出
思路:没学过矩阵快速幂。题解说是矩阵快速幂,之后就学了一遍。(可以先去学一下矩阵快速幂)
构造。然后就可以套板子写了,不过要注意把二进制改成十进制(这里也让我对对快速幂取模有了更好的理解)
注释见代码了
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long c[2][2];
};
long long x0, x1, a, b;
long long mod;
char s[1000010];
//矩阵快速幂模板
node solve(node x, node y)
{
node ans;
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
ans.c[i][j] = 0;
for(int k = 0; k < 2; k++)
{
ans.c[i][j] = (ans.c[i][j] + x.c[i][k] * y.c[k][j]) % mod;
}
}
}
return ans;
}
int main()
{
scanf("%lld %lld %lld %lld", &x0, &x1, &a, &b);
scanf("%s", s);
scanf("%lld", &mod);
node ans;//储存答案
ans.c[0][0] = ans.c[1][1] = 1;
ans.c[0][1] = ans.c[1][0] = 0;
node x;
x.c[0][0] = a;
x.c[0][1] = b;
x.c[1][0] = 1;
x.c[1][1] = 0;
int len = strlen(s) - 1;
node temp;
for(int i = len; i >= 0; i--)
{
int num = s[i] - '0';
//这里相当于对10取模了
//二进制是对2取模 对2取模后为t for(int i=0;i<t;i++) ans = solve(ans, x);
//即为 if(num&1) ans = solve(ans, x);
for(int i = 0; i < num; i++)
{
ans = solve(ans, x);
}
temp.c[0][0] = temp.c[1][1] = 1;
temp.c[0][1] = temp.c[1][0] = 0;
//二进制的话 只要翻一倍 十进制当然要翻十倍
for(int i = 1; i <= 10; i++)
{
temp = solve(x, temp);
}
x = temp;
}
//输出答案了
long long sum = (ans.c[1][0] * x1 % mod + ans.c[1][1] * x0 % mod) % mod;
printf("%lld\n", sum );
}
2019牛客暑期多校训练营(第五场)B.generator 1的更多相关文章
- 2019牛客暑期多校训练营(第五场) maximum clique 1
题意:给出n个不相同的数,问选出尽量多的数且任两个数字二进制下不同位数大于等于2. 解法:能想到大于等于2反向思考的话,不难发现这是一个二分图,那么根据原图的最大团等于补图的最大独立点集,此问题就变成 ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
- 2019牛客暑期多校训练营(第一场)-A (单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...
随机推荐
- DRF教程10-关系字段
https://www.django-rest-framework.org/api-guide/relations/ 在编程中核心的就是数据结构. 关系字段用来表示model之间的关系,比如外键,m2 ...
- 20180122 PyTorch学习资料汇总
PyTorch发布一年团队总结:https://zhuanlan.zhihu.com/p/33131356?gw=1&utm_source=qq&utm_medium=social 官 ...
- 【LeetCode】搜索旋转排序数组
[问题]假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个 ...
- MYSQL 数据库名、表名、字段名查询
//查询所有表的所有字段: select * from information_schema.columns where table_name='sys_users' 效果: //查询指定表的所有字段 ...
- java百货中心供应链管理系统 源码
开发环境: Windows操作系统开发工具:MyEclipse/Eclipse + JDK+ Tomcat + MySQL 数据库 百货中心供应链管理系统主要用于实现了企业管理数据统计等.本系统结构如 ...
- 寒假day24
数据挖掘得继续深入,人物画像需要进行更多层次的分析
- Python调用c++可执行程序
1.c++编译程序 #include <iostream> using namespace std; int test() { , b = ; return a+b; } int main ...
- ArchLinux安装(BIOS)
ArchLinux安装(BIOS) 说在前头:在经历过无数次的失败尝试过后总结出的可用的安装过程(比官方的简单一点) 官方安装指导 一.连接网络 1.连接 # wifi-menu 2.检查是否联通 ( ...
- Sequence Models Week 1 Character level language model - Dinosaurus land
Character level language model - Dinosaurus land Welcome to Dinosaurus Island! 65 million years ago, ...
- k8s中解决容器时差问题
解决k8s的pod容器的时差常用的两种方式: 1.通过设置pod 模板中的环境变量 env解决 在pod的模板中添加以下: apiVersion: v1 kind: Podmetadata: na ...