UVaOJ 10328 Coin Toss
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1269
题意:一共n张牌,求至少连续k张牌是正面的排列情况有多少种(1<=k<=n<=100)
思路:将至少转换为至多,所有排列情况减去至多连续k-1张牌是正面的排列情况,就可以得到至少k张连续正面的情况了
所有排列情况好求,就是2^n,要注意到n最多为100,超过了long long的范围,可以用两个long long需要模拟一下。
至多有x张牌是正面的情况,用s[0][i]表示第i张是反面的时候,至多x张牌连续正面的情况有多少个
用s[1][i]表示第i张是正面的时候,至多x张牌连续正面的情况有多少个
对于反面 s[0][i]=s[0][i-1]+s[1][i-1] 反面与限制条件无关,直接就等于之前的所有情况之和;
对于正面 如果i<=x s[1][i]=s[1][i-1]+s[0][i-1] 这时肯定不会出现连续的正面超过i的情况,所有也可以直接等于之前的所有情况之和;
如果i>x s[1][i]=s[1][i-1]+s[0][i-1]-s[0][i-k-1] i>x的时候,第i张如果要放正面,就需要排除之前从i-1到i-k连续k张是正面的那些排列,所有需要排除的情况都在s[0][i-k-1],因为从i-1到i-k的k张连续正面一定是从一个反面(i-k的前一个i-k-1一定是反面)开始的
1 #include<iostream> 2 #include<string.h> 3 #include<stdio.h> 4 #define ll long long 5 #define Flag 1000000000000000//大于等于的时候进位 6 using namespace std; 7 struct Num//用两个longlong模拟,重载了加减方便计算 8 { 9 ll H,L; 10 Num() 11 { 12 H=L=0; 13 } 14 void quan(int n)//求2^n,n张牌所有的排列情况 15 { 16 this->H=0; 17 this->L=1; 18 while(n--) 19 { 20 this->L<<=1; 21 this->H<<=1; 22 if(this->L>Flag)this->L-=Flag,this->H++; 23 } 24 } 25 Num operator +(const Num& b)const 26 { 27 Num tem; 28 tem.L = this->L + b.L; 29 tem.H = this->H + b.H; 30 if(tem.L>=Flag) 31 { 32 tem.H++; 33 tem.L-=Flag; 34 } 35 return tem; 36 } 37 Num operator -(const Num& b)const 38 { 39 Num tem; 40 if(this->L<b.L) 41 { 42 tem.L = this->L + Flag -b.L; 43 tem.H = this->H - b.H - 1; 44 } 45 else 46 { 47 tem.L = this->L - b.L; 48 tem.H = this->H - b.H; 49 } 50 return tem; 51 } 52 void display()//输出 53 { 54 if(this->H) 55 { 56 printf("%lld%015lld\n",this->H,this->L); 57 } 58 else 59 { 60 printf("%lld\n",this->L); 61 } 62 } 63 }; 64 Num s[2][101]; 65 66 Num que(int n,int k)//求n张牌,最多k个连续正面的情况 67 { 68 s[0][0].L=1; 69 int i=1; 70 while(i<=n) 71 { 72 s[0][i]=s[0][i-1]+s[1][i-1]; 73 if(i<=k) 74 { 75 s[1][i]=s[0][i-1]+s[1][i-1]; 76 } 77 if(i>k) 78 { 79 s[1][i]=s[0][i-1]+s[1][i-1]-s[0][i-k-1]; 80 } 81 i++; 82 } 83 return s[0][i-1]+s[1][i-1]; 84 } 85 86 int main() 87 { 88 int n,k; 89 while(cin >> n >> k) 90 { 91 Num q; 92 q.quan(n); 93 q=q-que(n,k-1);//相减得出至少k个正面的情况 94 q.display(); 95 } 96 return 0; 97 }
转载于:https://www.cnblogs.com/icfir/p/9084980.html
UVaOJ 10328 Coin Toss相关推荐
- 题解 UVA10328 【Coin Toss】
这道题目其实就是说有N张纸牌,问至少连续K张正面朝上的可能性是多少. 可以用递推做. 首先我们将题目所求从 至少K张 转化为 总数 - 至多K张 (为什么要这样自己想) 设F[i][j]为前i个纸牌至 ...
- 动态规划总结与题目分类
源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...
- 『ACM-算法-动态规划』初识DP动态规划算法
一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...
- (转)dp动态规划分类详解
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
- 《动态规划》— 动态规划分类
动态规划(英语:Dynamic programming,DP)是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于有重叠子问题和最 ...
- 递推DP(至少和至多之间的转换
UVa 10328 - Coin Toss 题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种. 转换成抛N次至多连续有N个减去抛N次至多连续有K-1个1的情况 dp[i][k]表 ...
- 转:动态规划题目分类
https://blog.csdn.net/cc_again/article/details/25866971 一.简单基础dp 这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见 ...
- 提取了下刘汝佳推荐的题号...
今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started 10055 - Hashmat the Brave Warrior ...
- 【DP专辑】ACM动态规划总结
转载请注明出处,谢谢. http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 ...
- ACM比赛经验、刷题记录及模板库总结(更新中)
前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...
最新文章
- FPGA设计心得(5)Aurora 例子工程分析与仿真实例分析(streaming版)
- Tomcat vs. Jetty vs. Undertow: Comparison of Spring Boot Embedded Servlet Containers
- 转:文件系统read,write缓存,有点意思
- python实现qq登录_在django中实现QQ登录
- python中json格式数据输出实现方式(无unicode编码输出形式)
- .net core 实现基于 JSON 的多语言
- 量子科技概念大火,国内现状如何?华为BAT均入局量子计算
- 银行大数据新玩法,构建“一湖两库”金融数据湖
- OBJECTPROPERTY OBJECT_ID TEXTPTR【转载】
- 华为旗下哈勃投资公司入股光刻机制造商科益虹源
- (转)30分钟正则表达式入门
- arcgis sample代码之SOE示例代码PageLayout REST Server Object Extension 的源码分析
- spark官方文档_Spark机器学习之Pipeline
- Python如何清屏命令行终端
- QQ音乐API爬取全过程
- 数据结构初阶——二叉树
- Maven私服nexus磁盘空间清理
- oracle11g 网页账号,oracle11g 创建用户并受权
- Filtered request failed
- 使用pandoc 生成带中文的pdf
热门文章
- jquery_ui_api中文
- 从宠物浴液做一个O2​O项目的设想
- 忘记using namespace std;
- 如何解决第三方JavaScript引入工程后报错
- 已有一个名为“frmadd”的组件。组件的名称必须是唯一的,而且名称必须不区分大小
- Win10网络连接面板中突然出现空白一片的解决办法
- 让人心烦的TIME_WAIT状态与SO_REUSEADDR选项
- 编写高可用Eureka Server
- linux 多线程超时中断,c#中的线程超时
- 非酋用计算机弹唱,非酋简谱 薛明媛/朱贺 听说爱情就是这样子