2016CCPC 中南地区邀请赛 A 矩阵快速幂

A

A^n=A^(n%2016)%7;

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <sstream>
  5 #include <string>
  6 #include <algorithm>
  7 #include <list>
  8 #include <map>
  9 #include <vector>
 10 #include <queue>
 11 #include <stack>
 12 #include <cmath>
 13 #include <cstdlib>
 14 // #include <conio.h>
 15 using namespace std;
 16 #define clc(a,b) memset(a,b,sizeof(a))
 17 #define inf 0x3f3f3f3f
 18 const int N=100010;
 19 const int MOD = 1e9+7;
 20 #define LL long long
 21 double const pi = acos(-1);
 22 // void fre() {
 23 //     freopen("in.txt","r",stdin);
 24 // }
 25 // inline int r() {
 26 //     int x=0,f=1;char ch=getchar();
 27 //     while(ch>‘9‘||ch<‘0‘) {if(ch==‘-‘) f=-1;ch=getchar();}
 28 //     while(ch>=‘0‘&&ch<=‘9‘) { x=x*10+ch-‘0‘;ch=getchar();}return x*f;
 29 // }
 30
 31 int mod(string s){
 32   int len;
 33   int i;
 34   int ans=0;
 35   len=s.length();
 36   // cout<<s<<endl;
 37   for(i=0;i<len;i++)
 38   ans=(ans*10+s[i]-‘0‘)%2016;
 39   return ans;
 40 }
 41
 42 struct matrix
 43 {
 44     int m[2][2];
 45 }ans, base;
 46
 47 matrix multi(matrix a, matrix b)
 48 {
 49     matrix tmp;
 50     for(int i = 0; i < 2; ++i)
 51     {
 52         for(int j = 0; j < 2; ++j)
 53         {
 54             tmp.m[i][j] = 0;
 55             for(int k = 0; k < 2; ++k)
 56                 tmp.m[i][j] = (tmp.m[i][j] + a.m[i][k] * b.m[k][j]) % 7;
 57         }
 58     }
 59     return tmp;
 60 }
 61
 62 void fast_mod(int n)
 63 {
 64     int a,b,c,d;
 65     scanf("%d%d%d%d",&a,&b,&c,&d);
 66     base.m[0][0] =a;
 67     base.m[0][1] =b;
 68     base.m[1][0] =c;
 69     base.m[1][1] =d;
 70     ans.m[0][0] = ans.m[1][1] = 1;
 71     ans.m[0][1] = ans.m[1][0] = 0;
 72     if(n==0){
 73         printf("1 0\n");
 74         printf("0 1\n");
 75         return;
 76     }
 77     while(n)
 78     {
 79         if(n & 1)
 80         {
 81             ans = multi(ans, base);
 82         }
 83         base = multi(base, base);
 84         n >>= 1;
 85     }
 86     printf("%d %d\n",ans.m[0][0],ans.m[0][1]);
 87     printf("%d %d\n",ans.m[1][0],ans.m[1][1]);
 88     return;
 89 }
 90
 91
 92 int main(){
 93     // fre();
 94     string s;
 95     while(cin>>s){
 96          int n;
 97          n=mod(s);
 98          // cout<<n<<endl;
 99          fast_mod(n);
100     }
101     return 0;
102 }
时间: 2024-10-13 20:39:50

2016CCPC 中南地区邀请赛 A 矩阵快速幂的相关文章

BNUOJ 34985 Elegant String 2014北京邀请赛E题 动态规划 矩阵快速幂

Elegant String Time Limit: 1000msMemory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main We define a kind of strings as elegant string: among all the substrings of an elegant string, none of them is a permutation of "0, 1,-, k

2014 BNU 邀请赛E题(递推+矩阵快速幂)

Elegant String 题意:给定一个字符串,由0-k数字组成,要求该串中,子串不包含0-k全排列的方案数 思路:dp[i][j]表示放到i个数字,后面有j个不相同,然后想递推式,大概就是对应每种情况k分别能由那几种状态转移过来,在纸上画画就能构造出矩阵了,由于n很大,所以用快速幂解决 代码: #include <stdio.h> #include <string.h> const long long MOD = 20140518; int t; long long n; i

BNUOJ 34985 Elegant String 2014北京邀请赛E题 矩阵快速幂

题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 题目大意:问n长度的串用0~k的数字去填,有多少个串保证任意子串中不包含0~k的某一个全排列 邀请赛上A的较多的一道题,比赛的时候死活想不出,回来之后突然就想通了,简直..... = =! 解题思路: 对于所有串我们都只考虑末尾最多有多少位能构成全排列的一部分(用l来表示),即最多有多少位不重复的数字出现,将问题转化为求末尾最多有k位能构成全排列的串的总数量 假设k为5,有一个

2014北京邀请赛E题-矩阵快速幂

题意:长度为n(1<=n<=10^18)的并且任意连续子串都不是0-k(1<=k<=9)的一个排列的字符串有多少种. 解法:矩阵快速幂.dp[i][j]表示i长度最后连续j个不同(即最后j个无重复,最后j+1个有重复)的字符串的个数.状态选好很重要.设计状态时最重要考虑是唯一性和可传递性,比赛时明明知道肯定是矩阵快速幂,但是一直没想到这个状态表示,自己设计的自己都不会转移. dp[i][j]有了后,后边加一个字符,这个字符可以是j之内的任意一个,也可以是j以外的,这样枚举每种情况,

2013长沙邀请赛A So Easy!(矩阵快速幂,共轭)

So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2286    Accepted Submission(s): 710 Problem Description A sequence Sn is defined as:Where a, b, n, m are positive integers.┌x┐is the ceil

【构造共轭函数+矩阵快速幂】HDU 4565 So Easy! (2013 长沙赛区邀请赛)

链接 :click here~~ 题意: A sequence Sn is defined as: Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate Sn. You, a top coder, say: So easy! [解题思路] 给一张神图,推理写的灰常明白了,关键是构造共轭函数,这一点实在是要有数学知识的理论基础,推出了递推式,接下

[矩阵快速幂]T-shirt(2018江苏邀请赛I题)

题目描述 JSZKC is going to spend his vacation! His vacation has N days. Each day, he can choose a T-shirt to wear. Obviously, he doesn’t want to wear a singer color T-shirt since others will consider he has worn one T-shirt all the time. To avoid this pr

bnu 34985 Elegant String(矩阵快速幂+dp推导公式)

Elegant String Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next Type: None None Graph Theory      2-SAT     Articulation/Bridge/Biconnected Component      Cy

矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Google Codejam Round 1A的C题. #include <bits/stdc++.h> typedef long long ll; const int N = 5; int a, b, n, mod; /* *矩阵快速幂处理线性递推关系f(n)=a1f(n-1)+a2f(n-2)+.