UVALive
来源:互联网 发布:python取代js 编辑:程序博客网 时间:2024/06/13 17:54
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T461点击打开链接
算法训练 Glenbow Museum
时间限制:1.0s 内存限制:256.0MB
问题描述
卡城著名的格林堡博物馆是加拿大西部最大的博物馆,展品涵盖了艺术、文化史以及矿物学。如今一个全新的展区正在被布置,它是专门为你这样杰出的程序猿(媛)打造的。不幸的是,由于空间不足,博物馆打算建造一栋新的建筑来重新安置这个展区。
新的建筑的尺寸和容量将不同于原始的建筑,但是所有楼层的设计都是直角多边形。一个直角多边形是内角均为90°或270°的多边形。如果我们记90°角为R(Right)、270°角为O(Obtuse),那么一个只包含R和O的字符串能够粗略的表示一个直角多边形。比如,一个矩形(图形1)就是最简单的直角多边形,它能够用RRRR来描述(内角按逆时针排列,起始角任意)。同样地,一个十字形直角多边形(图形2)能够用RRORRORRORRO、RORRORRORROR或者ORRORRORRORR来描述。这些序列被称为角序列。
![](http://lx.lanqiao.cn/RequireFile.do?fid=HfNQEQg7)
当然,一个角序列不一定能完全对应一个形状的多边形,因为它没有说明边长。并且一个角序列不一定能描述一个合法的直角多边形(比如RRROR)。
为了把事情搞得更麻烦,博物馆并不接受所有的楼层设计。一个博物馆保存了许多价值连城的物品,它们必须要被看守着。出于对成本的考虑,一个楼层最多只能有一个保安。所以只有满足以下要求的楼层设计能被接受:存在一个地点使得一个保安能监视到整个楼层。因此一个角序列能被接受,当且仅当它描述了一个能够被接受的多边形。注意图形2的十字形直角多边形能够被站在中心的保安完全监视,所以它是被接受的,因此角序列RRORRORRORRO是被接受的,即使它也能够描述其他不能被一个保安监视的多边形。
请帮助新建筑的设计师确定有多少给定长度的能够被接受的角序列。
新的建筑的尺寸和容量将不同于原始的建筑,但是所有楼层的设计都是直角多边形。一个直角多边形是内角均为90°或270°的多边形。如果我们记90°角为R(Right)、270°角为O(Obtuse),那么一个只包含R和O的字符串能够粗略的表示一个直角多边形。比如,一个矩形(图形1)就是最简单的直角多边形,它能够用RRRR来描述(内角按逆时针排列,起始角任意)。同样地,一个十字形直角多边形(图形2)能够用RRORRORRORRO、RORRORRORROR或者ORRORRORRORR来描述。这些序列被称为角序列。
当然,一个角序列不一定能完全对应一个形状的多边形,因为它没有说明边长。并且一个角序列不一定能描述一个合法的直角多边形(比如RRROR)。
为了把事情搞得更麻烦,博物馆并不接受所有的楼层设计。一个博物馆保存了许多价值连城的物品,它们必须要被看守着。出于对成本的考虑,一个楼层最多只能有一个保安。所以只有满足以下要求的楼层设计能被接受:存在一个地点使得一个保安能监视到整个楼层。因此一个角序列能被接受,当且仅当它描述了一个能够被接受的多边形。注意图形2的十字形直角多边形能够被站在中心的保安完全监视,所以它是被接受的,因此角序列RRORRORRORRO是被接受的,即使它也能够描述其他不能被一个保安监视的多边形。
请帮助新建筑的设计师确定有多少给定长度的能够被接受的角序列。
输入格式
输入文件包含多组测试数据。每组数据一行,包含一个正整数 L (1 <= L <= 1000),表示给定的角序列长度。
输入文件以仅包含0的一行结束。
输入文件以仅包含0的一行结束。
输出格式
对于每一组数据,输出一行,包含测试数据编号(从1开始),之后为给定长度的被接受的角序列的个数。具体格式参考样例输出。
样例输入
4
6
0
6
0
样例输出
Case 1: 1
Case 2: 6
Case 2: 6
数据规模和约定
按题目描述所示。
题目大意是让你求能够描述符合条件的直角多边形的个数 条件是 O角+4=R角个数 且所描述的序列不能出现重复的O(根据题意的视角描述可知)
据说是lrj数上的原题 用递推写的
除了递推 也可以使用排列组合的方式写
根据条件 知道了你需要构造一个R的个数是O的个数+4 并且所形成的的这个字符串的环中不能存在连续的两个O
这样一来就是一串连续的R中间插入 R的个数-4 个O 并且要求头尾不能同时存在
如此一来就很容易算了
另外由于C中的m和n有数量关系 因此不需要具体执行细节的阶乘
(评测系统为蓝桥杯系统)
#include <bits/stdc++.h>using namespace std;long long int C(long long int m){long long int sum=1;for(int i=m-4;i<=m;i++)sum*=i;return sum/120;}long long int judge(long long int n){if(n<4||n&1)return 0;return C(4+(n-4)/2+1)-C(4+(n-4)/2+1-2);}int main(){long long int n;int cnt=1;while(cin >> n&&n){cout << "Case "<< cnt << ": " << judge(n) << endl;cnt++;}}
阅读全文
0 0
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- HDU 2553.N皇后问题
- 互联网B端产品设计经验总结
- 对抗生成网络(Generative Adversarial Network)
- 拦截器
- linux 删除jar包中指定类型文件
- UVALive
- 机房收费系统—子窗体被覆盖
- python操作excel之修改数据——xlutils
- JS基础语法
- 大话设计模式-第四夜
- PHP正则表达式试题
- jQuery 表单城市二级联动
- 1008. 数组元素循环右移问题 (20)-浙大PAT乙级真题java实现
- Android 商品详情页