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)等价,等价的定义为其任意 ...
随机推荐
- ORM——Mybatis
引言 ORM 是 blablabla…… Mybatis知识点
- (转)null和NULL和nullptr和””区别
突然想到这个有趣的问题:C语言和C++对大小写是敏感的,也就是说null和NULL是区别对待的.NULL代表空地址,null只是一个符号.便来深究,看了很多资料,总结如下: 其实null和NULL都是 ...
- invisble
不可见索引概念: 不可见索引(Invisible Index)是ORACLE 11g引入的新特性.不可见索引是会被优化器忽略的不可见索引,除非在会话或系统级别上将OPTIMIZER_USE_INVIS ...
- LeetCode | No.1 两数之和
题目描述: Given an array of integers, return indices of the two numbers such that they add up to a speci ...
- java内存机制 垃圾回收
gc机制一 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc ...
- 浪潮服务器raid5-echo转义说明
https://jingyan.baidu.com/article/4ae03de3e4c8d33eff9e6bee.html https://wenku.baidu.com/view/3c5dc9a ...
- MySQL笔记 01
STRUCTURE QUERY LANGUAGE 数据库CRUD操作 DDL: 数据库定义语言,定义数据库数据表结构 CREATE(创建): 创建数据库 CREATE DATABASE 数据库名字; ...
- PAT Advanced 1155 Heap Paths (30) [DFS, 深搜回溯,堆]
题目 In computer science, a heap is a specialized tree-based data structure that satisfies the heap pr ...
- 201771010123汪慧和《面向对象程序设计Java》第十八周实验总结
一.总复习纲要 1. Java语言特点与开发环境配置(第1章.第2章) 2. Java基本程序结构(第3章) 3. Java面向对象程序结构(第4章.第5章.第6章) 4. 类.类间关系.类图 5. ...
- POJ 1840:Eqs 哈希求解五元方程
Eqs Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14169 Accepted: 6972 Description ...