2019第四次新生周赛——YZJ的牛肉干
描述
今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做YZJ的大佬,在共同的集训生活中,大家建立了深厚的友谊,YZJ准备做点什么来纪念这段激情燃烧的岁月,想了一想,YZJYZJ从家里拿来了一块上等的牛肉干,准备在上面刻下一个长度为nn的只由"Y" "Z" "J"三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能有其他字符),YZJ学长同时禁止在串中出现ZZ相邻的情况,他认为,"ZZ"看起来就像骂人的话语,影响不好。
你,NEW ACMer,YZJ的崇拜者,能帮学长算一下一共有多少种满足要求的不同的字符串吗?
输入
输入数据包含多个测试实例,每个测试实例占一行,由一个整数n组成,(0<n<40)。
输出
对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。
输入样例 1
1 2
输出样例 1
3 8
来源
hg
在牛肉干上面刻字,刻字的选择是Y,Z,J三个字符中的任意一个。
限制条件:Z和Z不能相连。
接下来,画图找规律:(图省略了~~~)
1 f[1]=3
2 f[2]=8
3 f[3]=22
4 f[4]=60
突然发现f[n]=2*(f[n-1]+f[n-2])。
#include<cstdio>
const int maxn=50;
long long a[maxn]={1,3};
int main()
{int i,n;for(i=2;i<40;i++){a[i]=2*(a[i-1]+a[i-2]);}while(~scanf("%d",&n)){printf("%lld\n",a[n]);}return 0;
}
当然,如果说这道题的n的数据范围特别大的话,这样做肯定是不行的(爆数据范围),可以使用矩阵快速幂的方法来解决这个问题。
矩阵的构造:
现在是三个字符Y,Z,J,其中Z和Z不能相邻,那么所有的清苦应该有八种:
YY、YZ、YJ、ZY、ZJ、JY、JZ、JJ,将这八种情况用从0开始的数字表示,对应的数字分别为0、1、2、3、4、5、6、7.
对于YY来说,确定了第一个Y之后,它对后面的情况没有影响了,所以只需考虑后面的Y就行了,也就是YY,YZ,YJ这三种情况。
对应的数字分别为0,1,2.
同理找出其他的关系,然后构造矩阵:
代码如下:
#include<algorithm>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<cstring>
#define P pair<long long,long long>
#define ms(a,b) memset(a,b,sizeof(a))
#define ll long long
using namespace std;
ll N,a,b,k;struct xiao
{ll f[8][8];
} ans,mapp;void init(xiao &ans)
{for(int i=0; i<8; ++i){for(int j=0; j<8; ++j){if(i==j)ans.f[i][j]=1;elseans.f[i][j]=0;}}
}void power(xiao &x,xiao &y,xiao &z)
{ms(z.f,0);for(int i=0; i<8; ++i){for(int j=0; j<8; ++j){if(x.f[i][j]){for(int k=0; k<8; ++k){z.f[i][k]+=(x.f[i][j]*y.f[j][k]);}}}}
}ll solve(ll k)
{init(ans);ll number=k;xiao temp=mapp,t;while(number){if(number%2==1){power(ans,temp,t);ans=t;}power(temp,temp,t);temp=t;number/=2;}return ans.f[0][0]+ans.f[0][1]+ans.f[0][2]+ans.f[0][3]+ans.f[0][4]+ans.f[0][5]+ans.f[0][6]+ans.f[0][7];
}int main()
{ll n;mapp={1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1};xiao t,x;power(mapp,mapp,t);while(cin>>n){printf("%lld\n",solve(n));}return 0;
}
2019第四次新生周赛——YZJ的牛肉干相关推荐
- 计算机学院2022级新生周赛(一)题解
更好的阅读体验\color{red}{更好的阅读体验}更好的阅读体验 另一篇题解\color{red}{另一篇题解}另一篇题解 文章目录 A. Hello , HAUE B. 我必须立刻签到,因为它有 ...
- 成都东软学院新生周赛(五)
成都东软学院新生周赛(五) 感受 这次比赛打的非常艰辛,全程1.20小时的时间全在写A题,而且还没有写出来.还是自己太菜了.比赛过程中根本就没有想到用位运算去写着三个题. 考点 位运算:位运算是二进制 ...
- 「CSP-S模拟赛」2019第四场
「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...
- 2020级HAUT新生周赛(四)@张承树专场
文章目录 A:会写脚本的月月鸟 B:别看了 这是水题 C:ACM脱单大法 D:Love_Jacques学长的游戏思维 E:后缀自动机next指针dag图上跑SG函数 F:新建 Microsoft Po ...
- Contest1003 - 河南工程学院2022级新生周赛(三)
目录 1,6男 2,我要拿最多的money2.0 3,极致完美的AK 4,吃豆人 5,胡辣汤啊胡辣汤 6,HF波那契数列 7,小朱要解密码 8,苦命的毅哥 1,6男 题目描述 ZY看透了世态炎凉,对于 ...
- bistuacm 2019年第⑦场新生训练赛题解
比赛链接:bistuacm 新生训练赛 第七场 难度:cf 900~1400 A 知识点:枚举 题意:寻找距离数组某个数最接近的a[i]<=k且b[i]=1的数. 解法:按题意模拟即可. #in ...
- 2019年广东工业大学新生赛 A-原初的信纸
//准备加入acm校队,教练要我们新生参加一下这个新生赛,就把去年的题目写了,顺便作为我的第一条博客. 链接:https://ac.nowcoder.com/acm/contest/3036/A 来源 ...
- 软件工程实践2019第四次作业
结对成员 031702208 031702212 需求分析--NABCD模型 N--Need 根据题目归纳痛点: 教师方面 偶尔想了解毕业学生的工作.发展情况,但没有适合的方式 新生方面 不知道如何选 ...
- ZZULI新生周赛(8)部分题题解
问题 A: 一道简单题 题目描述 ZYZ老师正在热情的准备着给大家发放的冰墩墩(是我雪容融不配了),在每一个包裹里都有一定数量的冰墩墩,现在ZYZ老师为了提前给大家发放,他想找到包裹中数量最多的那一个 ...
- 河南工程学院2022级新生周赛(三)题解
更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验 文章目录 A. 6男 B. 我要拿最多的Money2.0 C. 极致到完美的AK D. 吃豆人 E. 胡辣汤啊胡辣汤 F. H ...
最新文章
- 为什么 P8 程序员的代码你写不出来?零拷贝了解一下
- python中selenium中使用ajax_selenium 智能等待ajax完成调用
- 系列笔记 | 深度学习连载(6):卷积神经网络基础
- 用python输出回文数
- 大脚导入配置选择哪个文件_有史以来最全的 IntelliJ IDEA 配置图解
- 智能型住宅自动控制与管理系统分析
- 教师节,老师们最大的愿望竟然是。。 | 今日最佳
- P3850-[TJOI2007]书架【Splay】
- jedis StreamEntryID参数解释
- java 使用接口便于维护程序_Java初学——面向对象接口的应用
- linux -- su和sudo命令的区别
- python数值比较器_python笔记16(数据处理笔记1)
- delphi 消息列表中文说明
- 2021年1月13日以后,如何用Flash Player打开swf文件
- lenovo服务器换系统重装系统_lenovo镜像系统安装教程
- 合格的攻击性白帽黑客应该具备的基本素质(1)
- Python4班平均成绩统计_空中交通管理学院2017级学生 20182019学年第一学期成绩分析报告...
- 医疗是什么?AI医疗概念解析AI
- 华为运营商级路由器配置示例 | EVdPdNd VPLS over SRv6 TE Policy(静态配置)
- Android轻松实现日期选择器、生日选择器、自定义起始时间