陈老师的多校联合 20140809 C题
来源:互联网 发布:淘宝数据魔方论坛 编辑:程序博客网 时间:2024/05/01 01:27
http://vjudge.net/contest/view.action?cid=51408#problem/C
Description
You live in the universe X where all the physical laws and constants are different from ours. For example all of their objects are N-dimensional. The living beings of the universe X want to build an N-dimensional monument. We can consider this N dimensional monument as an N-dimensional hyper-box, which can be divided into some N dimensional hypercells. The length of each of the sides of a hyper-cell is one. They will use some N-dimensional bricks (or hyper-bricks) to build this monument. But the length of each of the Nsides of a brick cannot be anything other than fibonacci numbers. A fibonacci sequence is given below:
As you can see each value starting from 3 is the sum of previous 2 values. So for N = 3 they can use bricks of sizes (2,5,3), (5,2,2) etc. but they cannot use bricks of size (1,2,4) because the length 4 is not a fibonacci number. Now given the length of each of the dimension of the monument determine the minimum number of hyper-bricks required to build the monument. No two hyper-bricks should intersect with each other or should not go out of the hyper-box region of the monument. Also none of the hyper-cells of the monument should be empty.
Input
First line of the input file is an integer T(1T100) which denotes the number of test cases. Each test case starts with a line containingN(1N15) that denotes the dimension of the monument and the bricks. Next line contains N integers the length in each dimension. Each of these integers will be between 1 and 2000000000 inclusive.
Output
For each test case output contains a line in the format Casex:M where x is the case number (starting from 1) and M is the minimum number of hyper-bricks required to build the monument.
Sample Input
2 2 4 4 3 5 7 8
Sample Output
Case 1: 4 Case 2: 2
解题思路:求出n个数每个数至少是几个个Fibonacci数(可以重复)的和,然后这样把n个数的统计数乘起来就是答案。
#include <iostream>#include <cstring>#include <set>#include <cstdio>using namespace std;typedef long long LL;const int maxn =55;LL f[maxn],x[20];set<LL>fib;set<LL>::iterator it;void init(){ f[0]=1; f[1]=1; fib.insert(1); for(int i=2; i<maxn; i++) { f[i]=f[i-1]+f[i-2]; fib.insert(f[i]); }}int main(){ int n,cas=1,t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0; i<n; i++) scanf("%lld",&x[i]); init(); int i,j; long long ans=1; int cnt=1; for(i=0; i<n; i++) { //每个x[i]至少由几个斐波那契数组成(可以重复利用一个数多次) if(fib.find(x[i])==fib.end()) { cnt=1; int s=x[i]; while(fib.find(s)==fib.end()) { int t=lower_bound(f,f+55,s)-f; s=s-f[t-1]; cnt++; } ans*=cnt; } } printf("Case %d: %lld\n",cas++,ans); } return 0;}
- 陈老师的多校联合 20140809 C题
- 陈老师的多校联合 20140809
- 陈老师的多校联合2010811c题||09年武汉站||hdu3232
- 陈老师的多校联合 I题 二分
- 陈老师的多校联合 20140808 E题
- 陈老师的多校联合20180808 map映射字符串
- 陈老师的多校联合20140815 ||uvalive 5881 区间处理
- 陈老师的多校联合20140816||spoj10237 bfs
- 陈老师的多校联合20140818||Uvalive 5683 模拟
- 陈老师的多校联合 D题 字符串处理起来挺麻烦
- 陈老师的多校联合2009年武汉站D题 ||hdu 3033
- 陈老师的多校联合20140816A题||spoj 10228 动态规划
- UVALive 5691 二分图匹配||陈老师的多校联合20140818 J题
- 陈老师的多校联合20140811||HDU 3236 ||2009年武汉站G题 01背包问题
- 陈老师的多校联合20140816||SPOJ AMR11B 三角形的有向面积
- 陈老师的艺术人生
- 第一天听陈老师讲课的体会
- c语言联合union 的联合变量,联合标记,联合类型定义的区别
- 移植X264成功
- 总结linux中管线和数据流重导向的详解及区别
- java即时在线聊天(一)
- AJAX跨域请求数据原理与案例
- Django模板系统——过滤器
- 陈老师的多校联合 20140809 C题
- poj 1639 度限制生成树(小矮人野餐)
- HDU1097:A hard puzzle(快速幂求模)
- 统计文章出现最多的10个词语--python实现
- DICOM医学图像处理:DCMTK在VS2012中的配置
- Spring 事务最常用配置
- 阿拉伯数字转换为英文
- HTTP深入浅出 http请求
- ViewPager中PagerTabStrip对象的setTabIndicatorColor方法的作用