原题链接:HZNUOJ--刘老师的烦恼
https://acm.hznu.edu.cn/OJ/problem.php?id=2126
Description
刘老师在一次课外活动中组织ACM队的同学玩老鹰抓小鸡的游戏。按照游戏的规则,母鸡身后的小鸡应该按照身高从矮到高的顺序排序。但是因为队员们每个人都想当“爸爸”,所以他们每个人都想让自己的位置尽可能的靠后。一通乱站队之后,面对高低不齐的队伍,刘老师十分的头疼,请你帮帮他找出队伍中有几个人所站的位置是“绝对正确位置”的。“绝对正确位置”的定义为,某人A左边的人都比他矮,且他的右边的人都比他高。
Input
第一行一个数字T,代表有T组数据
每组数据有两行输入
第一行有一个数字n(0<=n<=10^5),代表队伍里有几个人
第二行行有n个不同的正数,ni代表第i个人的身高
Output
对于每组数据
第一行输出在“绝对正确位置”上的人数
第二行按从低到高的顺序输出“绝对正确位置”上的人的身高
若人数为0,则第二行为空行
末尾不得有有多余的空格或回车
Samples
input Copy
1 5 1 3 2 4 5
output Copy
3 1 4 5
解题思路:水题,直接暴力就能过,我关了同步流加速了一下,直接printf和scanf应该也可以
ac代码:
#include <bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N]; int b[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin >> t; while (t--) { int n; cin >> n; for (int i=1;i<=n;i++) { cin >> a[i]; } int ans=0; int u=1; for (int i=1;i<=n;i++) { int bo1=0,bo2=0; for (int j=i+1;j<=n;j++) //判断右边有没有比当前的数小的 { if(a[j]<=a[i]) { bo1=1; break; } } for (int j=i-1;j>=1;j--)//判断左边有没有比当前的数大的 { if(a[j]>=a[i]) { bo2=1; break; } } if(!bo1 && !bo2) //没找到的话存进b数组,ans++ { ans++; b[u]=a[i]; u++; } } cout << ans << endl; for (int i=1;i<u;i++) { cout << b[i] << ' '; } cout << endl; } return 0; }