P7912 [CSP-J 2021] 小熊的果篮

# [CSP-J 2021] 小熊的果篮

## 题目描述

小熊的水果店里摆放着一排 $n$ 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 $1, 2, \ldots, n$ 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里,具体方法是:每次都把每一个“块”中最左边的水果同时挑出,组成一个果篮。重复这一操作,直至水果用完。注意,每次挑完一个果篮后,“块”可能会发生变化。比如两个苹果“块”之间的唯一桔子被挑走后,两个苹果“块”就变成了一个“块”。请帮小熊计算每个果篮里包含的水果。

## 输入格式

第一行,包含一个正整数 $n$,表示水果的数量。

第二行,包含 $n$ 个空格分隔的整数,其中第 $i$ 个数表示编号为 $i$ 的水果的种类,$1$ 代表苹果,$0$ 代表桔子。

## 输出格式

输出若干行。

第 $i$ 行表示第 $i$ 次挑出的水果组成的果篮。从小到大排序输出该果篮中所有水果的编号,每两个编号之间用一个空格分隔。

## 样例 #1

### 样例输入 #1

```
12
1 1 0 0 1 1 1 0 1 1 0 0
```

### 样例输出 #1

```
1 3 5 8 9 11
2 4 6 12
7
10
```

## 样例 #2

### 样例输入 #2

```
20
1 1 1 1 0 0 0 1 1 1 0 0 1 0 1 1 0 0 0 0
```

### 样例输出 #2

```
1 5 8 11 13 14 15 17
2 6 9 12 16 18
3 7 10 19
4 20
```

## 样例 #3

### 样例输入 #3

```
见附件中的 fruit/fruit3.in。
```

### 样例输出 #3

```
见附件中的 fruit/fruit3.ans。
```

## 提示

**【样例解释 #1】**

这是第一组数据的样例说明。

所有水果一开始的情况是 $[1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0]$,一共有 $6$ 个块。

在第一次挑水果组成果篮的过程中,编号为 $1, 3, 5, 8, 9, 11$ 的水果被挑了出来。

之后剩下的水果是 $[1, 0, 1, 1, 1, 0]$,一共 $4$ 个块。

在第二次挑水果组成果篮的过程中,编号为 $2, 4, 6, 12$ 的水果被挑了出来。

之后剩下的水果是 $[1, 1]$,只有 $1$ 个块。

在第三次挑水果组成果篮的过程中,编号为 $7$ 的水果被挑了出来。

最后剩下的水果是 $[1]$,只有 $1$ 个块。

在第四次挑水果组成果篮的过程中,编号为 $10$ 的水果被挑了出来。

**【数据范围】**

对于 $10 \%$ 的数据,$n \le 5$。  
对于 $30 \%$ 的数据,$n \le 1000$。  
对于 $70 \%$ 的数据,$n \le 50000$。  
对于 $100 \%$ 的数据,$1 \le n \le 2 \times {10}^5$。

**【提示】**

由于数据规模较大,建议 C/C++ 选手使用 `scanf` 和 `printf` 语句输入、输出。

【算法分析】

模拟。

【AC代码】

#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
const int N=2e5+10;
inline int fread()
{char ch=getchar();int n=0,m=1;while(ch<'0' or ch>'9'){if(ch=='-')m=-1;ch=getchar();}while(ch>='0' and ch<='9')n=(n<<3)+(n<<1)+ch-48,ch=getchar();return n*m;
}
int n,sum,a[N];
bool flag[N];
struct node
{int m,x,y;
}z,p,q;
queue<node> q1,q2;
signed main()
{n=fread();for(int i=1;i<=n;i++)a[i]=fread();a[n+1]=!a[n];for(int i=2,j=1;i<n+2;i++)if(a[i]!=a[i-1])q1.push((node){j,i-1,a[i-1]}),j=i;//把连续的相同水果合并成一块sum=n;while(sum){while(q1.size()){z=q1.front(),q1.pop();while(flag[z.m] and z.m<=z.x)z.m++;//如果被取了if(z.m>z.x)continue;printf("%d ",z.m),sum--,flag[z.m]=true;//将块的第一个水果取出并输出if(z.x==z.m)continue;//块被取完了z.m++,q2.push(z);//存到q2里合并}printf("\n");while(q2.size()){q=q2.front(),q2.pop();while(q2.size()){p=q2.front();if(p.y==q.y)q.x=p.x,q2.pop();//合并else break;}q1.push(q);//放回q1}}return 0;
}

我橙名了!!!

给个关注吧

给个关注吧

P7912 [CSP-J 2021] 小熊的果篮相关推荐

  1. CSP - J 2020 T1 优秀的拆分

    https://www.luogu.com.cn/problem/P7071 /* CSP - J 2020 T1 优秀的拆分 https://www.luogu.com.cn/problem/P70 ...

  2. 2077:【21CSPJ普及组】小熊的果篮(fruit)

    2077:[21CSPJ普及组]小熊的果篮(fruit) 时间限制: 1000 ms         内存限制: 524288 KB 提交数: 1085     通过数: 311 [题目描述] 小熊的 ...

  3. 小熊的果篮(fruit)【CSPJ2021】

    题目描述 小熊的水果店里摆放着一排 n 个水果.每个水果只可能是苹果或桔子,从左到右依次用正整数 1.2.3.--.n 编号.连续排在一起的同一种水果称为一个"块".小熊要把这一排 ...

  4. 2020 CSP - J初赛 题解

    目录 写在前面的话 题面 题解 答案合集 单项选择题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 阅读程序题 一 16 17 18 19 20 21 二 22 23 24 ...

  5. CSP J/S SH 迷惑行为大赏

    w r 写 反 人 ... void solveBF(){for(int k=l;k<=r;k++){cnt=k%n;ans=max(ans,cnt);}cout<<ans; } i ...

  6. csp之模拟试题——2019 CSP——J

    hello大家好,今天给大家带来csp-j 2019的试题,大家可以做一下.老规矩,给个三连求好评,点赞关注收藏哦~ 不扯了,上题! 1.[ 单选 ] 中国的国家顶级域名是( ) A. .cn B. ...

  7. CSP - J 2020 T2 直播获奖

    题目链接 考场看完题后,感觉是个数据结构题 维护一个数据结构,需要支持单点插入和求第 kkk 小 考场上写的是 vector + 二分 ,结束后才知道可能会被卡,因为 vector 的插入是小常数 O ...

  8. 新鲜出炉的 CSP-J 2021 复赛题目 题解

    2021普及组复赛 代码量大点,难度一般. T1 P7909 [CSP-J 2021] 分糖果 最简单容易想到的思路,应该就是枚举[L,R]范围内的每一个数字 %n 的结果,保留最大结果,如下所示. ...

  9. 暑假CSP-J必刷题单

    字符串处理 题目 链接 [NOIP2018 普及组] 标题统计 https://www.luogu.com.cn/problem/P5015 [NOIP2003 普及组] 乒乓球 https://ww ...

最新文章

  1. 开发日记-20190529 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  2. Android相机的实现
  3. Python3实现红黑树[下篇]
  4. 华为算法工程师-2020届实习招聘题
  5. 少拿游戏来骗我,虚幻引擎5上的《黑客帝国》全新体验,画面帅到爆
  6. neo4j 查 match
  7. linux用户类型分类,信息安全技术题库:SELinux安全上下文主要包括用户、角色、类型、层次和分类字段。( )...
  8. android上方导航条跳转页面,Native Navigation导航组件的使用说明
  9. git 从远程仓库指定分支clone代码到本地
  10. 新海诚没有参与制作的作品_爱情可以是哪些样子——盘点新海诚和宫崎骏作品中的爱情故事...
  11. 303.区域和检索-数组不可变
  12. 钉钉小程序踩坑:(与微信小程序的区别)
  13. 如何使用Mediawiki搭建个人wiki系统、以及wiki的部分基本操作和设置
  14. 450米、90米、30米全国地形图DEM数据对比与分享
  15. 混合式学习,以学习者为中心的新型教学形式
  16. 用python实现分段函数_python:集成分段函数
  17. 每日一个CSS——模拟键盘
  18. 青春无敌?那只是一瞬间
  19. cpu利用率(cpu利用率突然100)
  20. 扎心了!当代大学生孤独等级测试,你是第几级?

热门文章

  1. DMotion - 基于DOTS的动画框架和状态机
  2. axios拦截器 config_axios拦截器的实现
  3. 移动端web开发-mate标签大用处
  4. 六大采购欺诈迹象提醒你采取行动
  5. 2004中国大学工学100强排行榜
  6. 常着敬畏之心,石高涛带领浙江天搜以变求生
  7. 解读NVIDIA显卡
  8. PHP代码猜数字游戏,基于JavaScript实现猜数字游戏代码实例
  9. 数据结构学习——表、查找
  10. 百度开发者中心 研究