zoj

摘要:
解决方案:第一次排序ifbi==bi-1&&ai-ai-1=1返回0;Ifbi==bi-1设f1=3;fn=3^n-fn-1;elsef1=2;fn=3^n-fn-1;然后使用namespacestd判断两端矩阵-1,3,31#include<cstio>2#include<cs环>3#include<iostream>4#include<algorithm>5;6型超长LL;7constlmod=1000000007;8structZ{9LLm[2][2];10LLa;11stringb;12}s[20];13ZA={14-1,0153316};17ZB={181,0190120};21LLPow{22LLres=1;23而{24if(b&1)res=res*a%mod;25a=a*a%mod;26b>>=1;27}28返回值;29}30boolcmp{31returnp.a<q.a;32}33Zoperator*{34Zc;35 for 36 for{37c.m[i][j]=0;38 for 39c.m[i][j]=%mod;40}41returnc;42}43Zmpow{44Zret,p;45ret=B,p=A;46而{47if(n&1)ret=ret*p;48p=p*p;49n>>=1;50}51返回;52}53intmain(){54LLn,m,flag=0;;55while{56if{57LLx=4*Pow%mod;58cout>s[i].a>>s[i]。b6364if{65LLx=Pow;66cout<<x<<endl;67继续;68}69排序;70LLx=1;71Zant;72秒[0]。a=0;73表示{7475if(s[i-1].a!

  题目链接:here——————

  题意:有四个人 A,B,C,D 每天出一套卷子,相邻的两天不能由同一个人出题

      给你两个数n,m分别表示n天和m个操作(把第ai天定为有bi出题)

      问有多少种方式??

  题解:  先排序

        if  bi == bi-1 && ai - ai-1 = 1     return 0;

        if       bi == bi-1  设f1 = 3;fn = 3^n - fn-1;

      else    f1 = 2;fn = 3^n - fn-1;

      再判断两头

      矩阵    -1,0

          3,3

zoj第1张zoj第2张
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long LL;
 7 const LL mod = 1000000007;
 8 struct Z{
 9     LL m[2][2];
10     LL a;
11     string b;
12 }s[20];
13 Z A ={
14     -1,0,
15     3,3
16 };
17 Z B = {
18     1,0,
19     0,1
20 };
21 LL Pow(LL a,LL b){
22     LL res = 1;
23     while(b){
24         if(b&1) res = res * a % mod ;
25         a = a * a % mod;
26         b >>= 1;
27     }
28     return res;
29 }
30 bool cmp(Z p,Z q){
31     return p.a < q.a;
32 }
33 Z operator * (const Z& a,const Z& b){
34     Z c;
35     for(int i = 0;i < 2 ; ++ i)
36         for(int j = 0;j < 2;j++){
37             c.m[i][j] = 0;
38             for(int k = 0;k < 2;k++)
39                 c.m[i][j] = (c.m[i][j] + a.m[i][k] * b.m[k][j]) % mod;
40         }
41     return c;
42 }
43 Z mpow(int n){
44     Z ret , p;
45     ret = B, p = A;
46     while(n){
47         if(n&1) ret = ret * p;
48         p = p * p;
49         n >>= 1;
50     }
51     return ret;
52 }
53 int main(){
54     LL n,m,flag = 0;;
55     while(cin>>n>>m){
56         if(m == 0){
57             LL x = 4 * Pow(3,n-1) % mod;
58             cout << x << endl;
59             continue;
60         }
61         for(int i = 1;i <= m;i++)
62             cin>>s[i].a>>s[i].b;
63 
64         if(m == 1){
65             LL x = Pow(3,n-1);
66             cout << x << endl;
67             continue;
68         }
69         sort(s+1,s+m+1,cmp);
70         LL x = 1;
71         Z ant;
72         s[0].a = 0;
73         for(int i = 1;i <= m; ++ i){
74 
75             if(s[i-1].a != 0){
76                 LL abs = s[i].a - s[i-1].a - 2;
77                 if(abs < 0)
78                 {
79                     if(s[i-1].b[0] == s[i].b[0]) {x = 0;break;}
80                     continue;
81                 }
82                 ant = mpow(abs);
83                 if(s[i-1].b[0] == s[i].b[0])
84                    x = x * (ant.m[0][0]*3 + ant.m[1][0]*3)%mod;
85                 else x = x * (ant.m[0][0]*2 + ant.m[1][0]*3)%mod;
86 
87             }
88             else {
89                 x = x * Pow(3,s[i].a - 1) % mod;
90             }
91             if(i == m && s[i].a < n){
92                 x = x * Pow(3,n-s[i].a) % mod;
93             }
94         }
95         cout << (x%mod + mod)%mod<< endl;
96     }
97 }
View Code

免责声明:文章转载自《zoj》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DirectDraw 常用功能代码记录 冷夜MiniMapX简介下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

C# 获取枚举 Enum 变量值的 Description 属性

如何在C#中读取枚举值的描述属性?有以下枚举:123456 public enum enum Langage{[System.ComponentModel.Description]Chinese,English}我们希望得到的是中文中的“Chinese”描述。123456789 publicstringGetEnumDescription{stringstr...

WPF知识点全攻略13- 绘图

行&lt;线条X1=“10”Y1=“100”X2=“260”Y2=“100“Stroke=“黑色”StrokeDashArray=“5”StrokeThickness=“2”&gt;线冲程&gt;矩形&lt;矩形边距=“5”笔划=“黑色”高度=“100”宽度=“100“&gt;&lt;&书信电报,...

Revit导入lumion渲染

利用Revit导出DAE文件格式插件,可以将Revit模型导入到lumion中进行图片渲染和漫游动画的制作。lumion强大的漫游功能,丰富的附加组件,绚丽的视频特效。lumion没有建模功能,但是Revit建模的没有统一的标准,导致一些不该同样的材质的地方,无法更改;如果有统一的标准,那么Revit结合lumion能做出任何想要的效果。Revit13版本能...

JWT加密解密

token2、使用https传输协议。这点是最主要的,前面3的未必能够100%保证安全)JWT由三部分组成,可以把用户名、角色等无关紧要的信息保存到Payload部分。Header:base64enc  //eyAiYWxnIjoiSFMyNTYiLCJUWVBFIjoiSldUIn0=Payload:base64enc  //用户的关键信息eyJ1c2Vy...

H3C交换机如何配置管理VLAN

1.输入“系统视图”(缩写为“sys”)进入系统配置模式[H3C]...

TCP UDP (转)

在互联网的早期,NCP协议用于主机之间的互连。该协议本身存在许多缺陷,例如:无法互连不同的主机,无法互连不同操作系统,并且没有纠错功能。为了改善这个缺点,Daniel提出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。TCP/IP协议栈主要分为四层:应用层、传输层、网络层和数据链路层。每个层都有相应的协议。如下图所示,所谓的协议是双方之...