当前位置: 首页 > wzjs >正文

网站建立的流程灰色关键词排名

网站建立的流程,灰色关键词排名,中山建设厅网站首页,讯美智能网站建设目录 题目简述: 思路梳理: 总代码: https://www.acwing.com/problem/content/description/4891/ 题目简述: 有两个品种的奶牛,分别为G和H,我们要在每个品种中各找一头牛当领导者,最后输出全…

目录

题目简述:

思路梳理:

总代码:


https://www.acwing.com/problem/content/description/4891/

题目简述:

有两个品种的奶牛,分别为G和H,我们要在每个品种中各找一头牛当领导者,最后输出全部的可能方案,当领导牛是有条件的,要么在其管辖范围内有其品种的全部牛,要不在其管辖范围内有另一品种牛的领导者;

思路梳理:

有一种很明显的思路:先判断在每头牛的管辖范围内有没有其品种的全部牛,如果有就代表这个牛能当领导牛,标记一下,在判断第二条件,因为第二个条件是依附于第一个条件而存在的,最后找出两种牛的各个领导牛的可能数,相乘即为答案;

这个思路很简单,但是代码实现较为复杂且易错,处理这些条件需要开三个前缀和数组,四个计数器,一个状态数组。。。(可能有其他更好的思路,但我只想到了这一个())

需要注意的是:分类讨论计算当前品种的奶牛的前缀和时,也要更新另一品种的前缀和,让另一品种的前缀和等于前一状态即可,要不会导致状态丢失(前缀和为0);【我因为这个调试了半天】

总代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
// s1 用于记录前缀位置中 'G'的数量,s2 用于记录前缀位置中 'H'的数量
// s3 用于记录领导牛的奶牛数量的前缀和
int s1[N], s2[N], s3[N]; 
int n, cnt1, cnt2, res1, res2; 
// n:奶牛总数;cnt1:根西牛('G')的总数;cnt2:荷斯坦牛('H')的总数
// res1:满足条件的根西牛领导者的可选数量;res2:满足条件的荷斯坦牛领导者的可选数量
char s[N]; // 存储每头奶牛的品种('G' 或 'H')
int a[N]; 
bool b[N]; // 标记某头奶牛是否已满足成为领导者的条件(条件一)int main() {cin >> n; // 输入奶牛的总数// 遍历每头奶牛,统计品种信息并计算前缀和for (int i = 1; i <= n; i++) {cin >> s[i]; // 输入第 i 头奶牛的品种if (s[i] == 'G') {// 更新根西牛的前缀数量,荷斯坦牛前缀数量不变,根西牛总数加 1s1[i] = s1[i - 1] + 1; s2[i] = s2[i - 1]; cnt1++; }if (s[i] == 'H') {//更新荷斯坦牛的前缀数量,根西牛前缀数量不变,荷斯坦牛总数加 1s2[i] = s2[i - 1] + 1; s1[i] = s1[i - 1]; cnt2++; }}// 处理每头奶牛写下的名单范围,判断是否满足条件一(名单包含其品种所有奶牛)for (int i = 1; i <= n; i++) {cin >> a[i]; if (s[i] == 'G') {// 判断该根西牛的名单是否包含所有根西牛if (s1[a[i]] - s1[i - 1] == cnt1) { res1++; // 根西牛领导者可选数量加 1b[i] = 1; // 标记该奶牛已满足条件s3[i] = s3[i - 1] + 1; // 更新满足条件的奶牛数量前缀和} else {s3[i] = s3[i - 1]; // 不满足条件,前缀和不变}}if (s[i] == 'H') {// 判断该荷斯坦牛的名单是否包含所有荷斯坦牛if (s2[a[i]] - s2[i - 1] == cnt2) { res2++; // 荷斯坦牛领导者可选数量加 1b[i] = 1; // 标记该奶牛已满足条件s3[i] = s3[i - 1] + 1; // 更新满足条件的奶牛数量前缀和} else {s3[i] = s3[i - 1]; // 不满足条件,前缀和不变}}}// 处理未标记的奶牛,判断是否满足条件二(名单包含另一品种的领导者)for (int i = 1; i <= n; i++) {if (b[i]) continue; // 已满足条件一,跳过// 判断该奶牛的名单中是否包含已满足条件的奶牛(即是否包含另一品种的领导者)if (s3[a[i]] - s3[i - 1] > 0) { if (s[i] == 'G') res1++; // 根西牛满足条件二else res2++; // 荷斯坦牛满足条件二}}cout << res1 * res2 << endl; // 输出满足条件的选择方案数量(根西牛与荷斯坦牛可选领导者数量的乘积)return 0;
}

细节探讨:

最后判断条件二的时候并没有分类讨论,满足条件一的奶牛是否和当前所枚举的奶牛相同,这样可以吗?答案是可以的;

 

例如此图,第2个G符合条件1,但它一定不会出现在第3个G的前缀和(s3[4]-s3[3-1])里,且题目数据里也标注了i<=ei<=n,所以无需担心判断条件2时,前缀和中有和自身相同品种的牛~~~~

(细不细~) 

http://www.dtcms.com/wzjs/302139.html

相关文章:

  • 网站建设费账务处理百度最怕哪个部门去投诉
  • wordpress 两个导航扬州整站seo
  • 平顶山做网站哪家好培训机构排名前十
  • 网站建设网站服务西安百度推广竞价托管
  • 网站制作现状解决方案外贸平台有哪些?
  • 动态网站中如何做项目栏百度seo关键词排名查询工具
  • 来个可以做渗透的网站企业营销推广
  • 做网站需要哪些程序员百度首页排名优化服务
  • 岳阳做网站哪家好打开百度一下搜索
  • 精品课程网站建设方案深圳网络营销策划公司
  • wordpress自动汉化版宁波seo推广定制
  • 上海网站搜索排名自助建站系统破解版
  • 万江仿做网站网站怎么做到秒收录
  • 网站前置审批在哪里办百度一下移动版首页
  • 江苏高效网站制作公司深圳网络优化推广公司
  • 临沂公司做网站网建
  • 专业苏州网站建设公司最新域名解析
  • 网站上做地图手机上显示免费的网页入口
  • 企业网站首页设计原则湖南平台网站建设设计
  • wordpress 营销模板下载百度网站推广排名优化
  • wordpress错误怎么解决西安seo优化培训
  • 做网站优化词怎么选择前端seo搜索引擎优化
  • 品牌营销策划方案ppt个人做seo怎么赚钱
  • 建立一个自己的网站需要多少钱竞价推广托管公司介绍
  • 动态html做网站背景搜索引擎内部优化
  • 邯郸商城网站建站大的网站建设公司
  • 做网站怎么弄模板温州seo教程
  • 如何了解和掌握一个网站的权重长沙seo网站推广
  • 延吉网站建设彩票免费的十大免费货源网站
  • 国内做心理咨询师培训出名的网站网页广告