CodeChef2015年8月问题
来源:互联网 发布:校园暴力看待 知乎 编辑:程序博客网 时间:2024/05/02 06:45
COOKMACH
(1)问题描述:对于一个整数,支持两种操作,除以2或者乘以2,给定一个整数A,问经过最少多少次操作可以变成B(B为2的幂)。
(2)要点分析:水题,先将a不断除以2使得a是b的因子,再不断乘以2使得a等于b。
(3)代码:
#include <stdio.h>int main(){unsigned int nCases = 0;scanf("%d",&nCases);for(unsigned int iCases = 1;iCases <= nCases;++iCases){unsigned int a = 0,b = 0;scanf("%d%d",&a,&b);unsigned int ans = 0;for(;0 != (b%a);++ans,a /= 2);for(;a != b;a *= 2,++ans);printf("%u\n",ans);}return 0;}
GRGUY
(1)问题描述:
(2)要点分析:参考代码中的状态转移方程
(3)代码:
#include <stdio.h>#include <string.h>#include <vector>#include <assert.h>using std::vector;int main(){static const unsigned int buff_size = 1000000;unsigned int nCases = 0;scanf("%d",&nCases);char* abuff = new char[buff_size+1];char* bbuff = new char[buff_size+1];for(unsigned int iCases = 1;iCases <= nCases;++iCases){scanf("%s%s",abuff,bbuff);size_t len = strlen(abuff);assert(len == strlen(bbuff));vector<unsigned int> dps[2];dps[0].resize(len,(unsigned int)(-1));dps[1].resize(len,(unsigned int)(-1));char* buff[2] = { 0 };buff[0] = abuff;buff[1] = bbuff;if(abuff[0] == '.') dps[0][0] = 0;if(bbuff[0] == '.') dps[1][0] = 0;for(size_t i = 1;i < len;++i){for(unsigned int k = 0;k < 2;++k){if(buff[k][i] == '#') dps[k][i] = (unsigned int)(-1);// else if(buff[k][i-1] == '.') dps[k][i] = dps[k][i-1];// buff[k][i] == buff[k][i-1] == '.'else if(buff[1-k][i-1] == '#')dps[k][i] = (unsigned int)(-1);// buff[k][i] == '.' && buff[k][i-1] == '#' && buff[1-k][i-1] == '#'else dps[k][i] = (unsigned int)(-1) == dps[1-k][i-1]?(unsigned int)(-1):(dps[1-k][i-1] + 1);}}unsigned int ans = (unsigned int)(-1);if(dps[0][len-1] < ans) ans = dps[0][len-1];if(dps[1][len-1] < ans) ans = dps[1][len-1];if((unsigned int)(-1) != ans) printf("Yes\n%u\n",ans);else printf("No\n");}delete[] abuff;delete[] bbuff;return 0;}
ADMAG
(1)问题描述:
(2)要点分析:枚举前面几项可以知道,实际是求大于n的Fibonacci数的下标
(3)代码:
#include <stdio.h>#include <assert.h>int main(){static const unsigned int maxsize = 87;unsigned long long fibonacci[maxsize] = { 1,2 };for(unsigned int i = 2;i < maxsize;++i) fibonacci[i] = fibonacci[i-1] + fibonacci[i-2];unsigned int nCases = 0;scanf("%d",&nCases);for(unsigned int iCases = 1;iCases <= nCases;++iCases){unsigned long long n = 0;scanf("%lld",&n);unsigned int ans = 0;for(;n >= fibonacci[ans];++ans);printf("%u\n",ans);}return 0;}
0 0
- CodeChef2015年8月问题
- CodeChef2015年9月问题
- 2008年8月问题征集帖
- CodeChef2014年6月问题
- CodeChef2016年03月问题
- CodeChef2016年09月问题
- CodeChef2016年12月问题
- 2009年8月,服务器DNS解析问题
- PC无法上网问题!2010年8月16号
- NYOJ 57 6174问题 2013年8月20日
- NYOJ 77 开灯问题 2013年8月20日
- 2016年8月问题记录与总结
- 刘金金16年的8月9月10月
- 2008年9月问题征集帖
- 2015年3月31号问题
- 2015年04月16日问题
- 2015年04月19日问题
- 2015年05月02日 问题
- sdk manager 无法更新SDK的问题
- leetcode 126 —— Word Ladder II
- 网站客户端制作
- JavaScript Puzzlers (试题)
- 26-网络编程-06-网络编程(域名解析)
- CodeChef2015年8月问题
- node 纪录
- 推荐引擎算法学习导论:协同过滤、聚类、分类
- CharSequence与String的区别
- Linux开机自启动程序详解
- POJ 2386 Lake Counting(dfs)
- 使UDP服务器尽可能可靠
- Cocos2d-JS中使用Cocos Studio资源02:登录界面
- 【Java代码保护技术】代码混淆