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=

随便看看

oracle查询连接数、并发数、共享池大小

1、查看当前数据库建立的会话情况:selectsid,serial#,username,program,machine,statusfromv$session;2、查询数据库当前进程的连接数:selectcount(*)fromv$process;3、查看数据库当前会话的连接数:selectcount(*)fromv$session;4、查看数据库的并发连接...

windows server2012 nVME和网卡等驱动和不识别RAID10问题

安装2012--不识别M.2nVME,下载官方驱动程序,并将其注入没有多个驱动程序的系统--添加ITSK通用驱动程序:|Win8012R2.x64网卡驱动程序无法打开--提取官方驱动程序EXE文件以添加网卡驱动程序不识别SATARAID10--超过2T,最大Legacy为2T。...

mac格式化重装系统

4.选择“重新安装MacOS”5.按照以下步骤中的提示进行操作。安装需要半个多小时。在此期间无法断开网络,否则需要重新安装...

Java 安全之:csrf攻击总结

最近,我在维护一些旧项目。在调试期间,我发现请求被反复拒绝。我仔细查看了项目的源代码,发现存在csrftoken验证。我借此机会了解了csrf攻击,并将其总结成一篇论文。受攻击的网站无法阻止攻击。在整个过程中,攻击者无法获取受害者的登录凭据,只能“冒充”。CSRF攻击成功,因为服务器将攻击者发送的请求误认为是用户的请求。服务器通过验证请求是否携带正确的令牌来...

可爱猫+python——定制化微信机器人

框架是模拟真实用户操作,只要不违法乱纪,是不用担心账号冻结问题的。...

MAC接普通外置键盘的修改键位的方法

我使用Mac已经一年多了,现在我每天都越来越喜欢它。所有使用过Mac的学生都知道,Mac键盘的最大特点是它比普通键盘更具有命令键位置。普通键盘没有命令键。当我连接键盘时,我发现胜利键到处都是命令键。非常发达,所以你拥有mac下所需的所有密钥。但最关键的问题之一是,它们的顺序与Mac下的顺序不同。这与mac的使用习惯不一致。百度之后,我发现键盘可以修改。...