acm新手小白必看系列之(5)——枚举进阶例题精讲
acm新手小白必看系列之(5)——枚举进阶例题精讲
1.牛奶碑文(暴力枚举)
小伟暑假期间到大草原旅游,在一块石头上发现了一些有趣的碑文。碑文似乎是一个神秘古老的语言,只包括三个大写字母 C、O 和 W。尽管小伟看不懂,但是令他高兴的是,C、O、W的顺序形式构成了一句他最喜欢的奶牛单词“COW”。现在,他想知道有多少次 COW 出现在文本中。
如果 COW 内穿插了其他字符,只要 COW 字符出现在正确的顺序,小伟也不介意。甚至,他也不介意出现不同的 COW 共享一些字母。例如,CWOW 出现了 1 次 COW,CCOW 算出现了2 次 COW,CCOOWW 算出现了 8 次 COW。(看懂这个,题就出来了)
Input
第 1 行为 1 个整数 N。
第 2 行为 N 个字符的字符串,每个字符是一个 C、O 或 W。
Output
输出 COW 作为输入字符串的字串出现的次数(不一定是连续的)。
提示:答案会很大,建议用 64 位整数**(long long)**
Sample Input
6
COOWWW
Sample Output
6
Hint
对于 50% 的数据满足:N≤60。
对于 100% 的数据满足:N≤100000。
单组输入
比如ccooww
遇到C则C的个数+1,a=2;
遇到O则CO的个数加当前C的个数,b=a+a=4;
遇到W则COW的个数加当前CO的个数,c=b+b=8;
#include <bits/stdc++.h>
using namespace std;
int n;//单词encounter遇到
long long enc=0, enco=0, encow=0;
string cow;
int main()
{scanf("%d", &n);cin>>cow;for(int i=0; i<n; i++){if(cow[i]=='C')enc++;if(cow[i]=='O')enco+=enc;if(cow[i]=='W')encow+=enco;}cout<<encow<<endl;return 0;
}
2.丑数(暴力枚举)
只有质数2,3,5,7这几个作为因子的数叫做,丑数,比如前20个丑数是(从小到大来说) 1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24和25.
Input
我们给你个n(1<=n<=5842)当输入n为0结束。
Output
输出第n个丑数。每个数一行。
Sample Input
1
2
3
4
11
Sample Output
1
2
3
4
12
思路呢我反正就知道两种大家可以都试试噢~
- 第一种把所有的丑数都用循环列出来然后输出,所以把丑数数组打出来就ok了(会超时),还有一种叫打表也是把所有的丑数都列出来。。。具体操作,把5842所有的丑数打出来,我相信你不会真打,所以,有个窍门是——用第一个程序打印的结果然后。。。
这个呢,当作娱乐,下面说第二种正规的方法。 - 丑数的另一种产生方法,由最先4个最小的丑数乘以2、3、5、7产生之后的丑数,
并且让之后产生的所有丑数按升序排列。
#include <bits/stdc++.h>
#define min4(a,b,c,d) min(min(a,b),min(c,d))
using namespace std;
int n,p2,p3,p5,p7,a[5850];//定义min4(a,b,c,d),找四个数中的最小值
int main()
{a[1]=1;p2=p3=p5=p7=1;for(int i=2; i<=5842; i++) //打表{a[i]=min4(a[p2]*2,a[p3]*3,a[p5]*5,a[p7]*7);//a[p2]、a[p3]、a[p5]、a[p7]分别为*2、*3、*5、*7的次数,//找出来最小值之后,判断这个最小值是分别乘过几次2,3,5,7,乘了几遍;if(a[i]%2==0)p2++;//如果选择的最小值a[i]是乘以了2,则*2的丑数下标位置后移一位if(a[i]%3==0)p3++;if(a[i]%5==0)p5++;if(a[i]%7==0)p7++;}while(cin>>n&&n)printf("%d\n",a[n]);return 0;
}
3.趣味解题(二进制枚举)
ACM程序设计大赛是大学级别最高的脑力竞赛,素来被冠以"程序设计的奥林匹克"的尊称。大赛至今已有近40年的历史,是世界范围内历史最悠久、规模最大的程序设计竞赛。比赛形式是:从各大洲区域预赛出线的参赛队伍,于指定的时间、地点参加世界级的决赛,由1个教练、3个成员组成的小组应用一台计算机解决7到13个生活中的实际问题。
现在假设你正在参加ACM程序设计大赛,这场比赛有 n 个题目,对于第 i 个题目你有 a_i 的概率AC掉它,如果你不会呢,那么这时候队友的作用就体现出来啦,队友甲有 b_i 的概率AC掉它, 队友乙有 c_i 的概率AC掉它,那么现在教练想知道你们队伍做出 x 个题目的概率。
Input
输入一个正整数T(T<=100),表示有T组数据,对于每组数据首先输入一个 n (7<=n<=13),表示有 n 个题目,接下来输入三行,
第一行输入 n 个数a_i,第二行输入 n 个数b_i,第三行输入 n 个数c_i, 其中 a_i, b_i, c_i 的意义如题,最后输入一个 x 表示教练想要知道你们队伍做出的题目数(x>=0)。
Output
输出一行表示结果,保留4位小数
Sample Input
2
7
0.1 0.2 0.3 0.4 0.5 0.6 0.7
0.2 0.3 0.4 0.5 0.6 0.7 0.8
0.3 0.4 0.5 0.6 0.7 0.8 0.9
1
7
0.1 0.2 0.3 0.4 0.5 0.6 0.7
0.2 0.3 0.4 0.5 0.6 0.7 0.8
0.3 0.4 0.5 0.6 0.7 0.8 0.9
5
Sample Output
0.0000
0.2811
- 题目关键,看懂题目概率
#include <bits/stdc++.h>
using namespace std;
int t,n,x,i,j,cnt;
double a[15],b[15],c[15],ac[15],wa[15],ans,p;
//ac[i]表示团队做对第i题的概率,wa[i]表示团队做错第i题的概率
int main()
{cin>>t;while(t--){cin>>n;for(i=0; i<n; i++)cin>>a[i];for(i=0; i<n; i++)cin>>b[i];for(i=0; i<n; i++)cin>>c[i];cin>>x;//输入ans=0;for(i=0; i<(1<<n); i++)//开始二进制枚举{p=1;cnt=0;for(j=0; j<n; j++)//模板{wa[j]=(1-a[j])*(1-b[j])*(1-c[j]);//wa【j】3个人都不会做这题,即团队做不出这题的概率;ac[j]=1-wa[j];//概率计算if(i&(1<<j)) //判断条件 {p=p*ac[j]; //cnt记录团队ac数量cnt++;}elsep=p*wa[j];//cnt记录团队wa数量}if(cnt==x)//如果达到要求的题数ans+=p;//加上概率}printf("%.4lf\n",ans);}return 0;
}
- 下节提示
- acm新手小白必看系列之(6)——gcd与lcm精讲及例题
acm新手小白必看系列之(5)——枚举进阶例题精讲相关推荐
- acm新手小白必看系列之(8)——二分法精讲及例题
acm新手小白必看系列之(8)--二分法精讲及例题 二分,分的是答案,直接在答案在的区间范围中二分,分出一个值,就判断是不是答案,并进行转移 如果已知候选答案的范围(min,max)(单调有序),(无 ...
- acm新手小白必看系列之(9)——栈精讲及例题
acm新手小白必看系列之(9)--栈精讲及例题 先进栈后出栈 可以把栈想象成一个上端开口的杯子.... 栈只能定义为在一端进行插入和删除操作 1.程序员问题 程序员输入程序出现差错时,可以采取以下的补 ...
- acm新手小白必看系列之(10)——队列精讲及例题
acm新手小白必看系列之(10)--队列精讲及例题 队列其实是很复杂的,有很多种队列的情况 下面只讲基础能用上的 队列:先进先出 在这里,我将引入两个整型变量head和tail.head用来记录队列的 ...
- acm新手小白必看系列之(7)——快速幂取模精讲及例题
acm新手小白必看系列之(7)--快速幂取模精讲及例题 性质1:(a+b)%m=(a%m+b%m)%m 性质2:(ab)%m=(a%mb%m)%m 给你一个数a,让你求其b次连乘后的结果 当b很小时, ...
- acm新手小白必看系列之(3)——暴力枚举精讲及例题
acm新手小白必看系列之(3)--暴力枚举精讲及例题 暴力枚举说白了就是列举所有情况,然后一个一个排查. 这节多说无益直接上题(这节假的精讲) 1·大乐透 在小明曾经玩过的一种对号码的纸牌游戏(乐透) ...
- acm新手小白必看系列之(1)——二维数组及结构体精讲附带例题
*acm新手小白必看系列之(1)--二维数组及结构体 ** c++准备工作** (可能小白像我一样也是学习的c语言) 万能头文件,放在第一行 #include<bits/stdc++.h> ...
- 新手python爬虫代码_新手小白必看 Python爬虫学习路线全面指导
爬虫是大家公认的入门Python最好方式,没有之一.虽然Python有很多应用的方向,但爬虫对于新手小白而言更友好,原理也更简单,几行代码就能实现基本的爬虫,零基础也能快速入门,让新手小白体会更大的成 ...
- 计算机新手教程装系统,新手小白必看电脑重装系统教程 四种方法至少会一种就够用!...
电脑买来时间久了,就会出来卡顿.蓝屏等很多问题.你的电脑有这些问题吗?当电脑出现这些问题时,我们该怎么做呢?当然就是给电脑重装系统,那么你会给电脑重装系统吗?小白必看的电脑重装系统教程哦! 给电脑装系 ...
- 新手小白必看!自媒体运营攻略!
今天这期内容主要是给大家做一个总结,新手做自媒体常见的一些问题,大周建议先点赞加收藏再继续往下看吧. 直接上干货: 1.自媒体适合新手小白做吗? 大周认为很适合,从现在开始还不晚.自媒体最大的魅力就在 ...
最新文章
- PAT甲级1118 Birds in Forest :[C++题解]并查集
- 机器学习第二篇:详解KNN算法
- maven设置jdk版本
- mysql mydumper_系统运维|Mydumper-MySQL数据库备份工具
- 串口通讯编程一日通3(COMMTIMEOUTS DCB整理)
- wincc服务器系统,什么情况下用wincc服务器与客户端
- 《JavaScript高级程序设计》红宝书第一遍阅读(了解概念)
- Boost::asio概览
- python之HTTP处理模块urllib和urllib2
- Mint-ui MessageBox.confirm 确定和取消事件
- 显卡内存一直被占用解决方式
- Qt5.12.6 + VS2019添加图片资源文件
- 对话框不响应WM_KEYDOWN消息,可以通过重载BOOL PreTranslateMessage(MSG * pMsg)来实现
- windows如何使用bat快速安装计划任务?
- OpenLayers标记地图点及点击地图点显示自定义弹出框
- android优化最强软件,七款安卓手机优化软件推荐 为手机提速
- All The Elements Pronounced in Order (American English)
- 那些年的,那些人的,那些事。
- 递归实现求最大公约数
- 解决申请开发者office E5中无法发送手机验证码,reCaptcha加载失败