6. 游乐园

6. 游乐园

题目ID:9479必做题100分

最新提交:

Runtime Error

5 分

历史最高:

Runtime Error

5 分

时间限制: 1000ms

空间限制: 524288kB

题目描述

鱼大大和羊大大准备去方特游乐园游玩,在此之前他们做足了游玩攻略,游乐园中有10个游乐设施供有个玩乐。羊大大从多个APP上找到了该游乐园的各个项目共n条实时评价,并和鱼大大一起统计。

羊大大每找到一个游乐设施的好评,鱼大大就将该设施的受欢迎度度+1,羊大大每找到一个游乐设施的差评,鱼大大就将该设施的受欢迎度-1。现在鱼大大请求你写出程序,帮助安排他们的游玩顺序。他们将从最受欢迎的游乐设施开始游玩。若有多个设施的受欢迎度相同,将按字符串排序较小的优先游玩。若受欢迎度为负数则不游玩。

这 10 个游乐设施分别是:

bumpercar
bungeejumping
carousel
ferriswheel
hauntedhouse
jumpingmachine
pendulum
pirateship
rollercoaster
shootinggame

输入格式

一行n表示接来下n条评价

接下来n行 每行一个娱乐设施名字以及评价

输出格式

游玩顺序,中间使用“>>>”连接

样例

Input 1

10 bumpercar good shootinggame good pirateship bad rollercoaster good pendulum bad shootinggame good pirateship bad pirateship good pirateship bad shootinggame bad

Output 1

bumpercar>>>rollercoaster>>>shootinggame>>>bungeejumping>>>carousel>>>ferriswheel>>>hauntedhouse>>>jumpingmachine

样例解释

在这 10 个游乐设施里,有两个不受欢迎的设施"pendulum" 和 “pirateship”,所以不游玩这两个,其他的游乐设施按照受欢迎程度游玩。

数据范围

n≤30

#include <bits/stdc++.h>
using namespace std;
struct x {
    string str;
    int a=0;
};
bool cmp(x a, x b) {
    return a.a > b.a;
}
int main()
{
    x a[15] = {}, b[15] = {};
    int n;
    cin >> n;
    string ing,str;
    a[1].str = "bumpercar";
    a[2].str = "bungeejumping";
    a[3].str = "carousel";
    a[4].str = "ferriswheel";
    a[5].str = "hauntedhouse";
    a[6].str = "jumpingmachine";
    a[7].str = "pendulum";
    a[8].str = "pirateship";
    a[9].str = "rollercoaster";
    a[10].str = "shootinggame";
    for (int i = 1; i <= n; i++) {
        cin>>str;
        cin >> ing;
        if(str== "bumpercar") {
            if (ing == "good") a[1].a++;
            else a[1].a--;
        }
        if (str == "bungeejumping") {
            if (ing == "good") a[2].a++;
            else a[2].a--;
        }
        if (str == "carousel") {
            if (ing == "good") a[3].a++;
            else a[3].a--;
        }
        if (str == "ferriswheel") {
            if (ing == "good") a[4].a++;
            else a[4].a--;
        }
        if (str == "hauntedhouse") {
            if (ing == "good") a[5].a++;
            else a[5].a--;
        }
        if (str == "jumpingmachine") {
            if (ing == "good") a[6].a++;
            else a[6].a--;
        }
        if (str == "pendulum") {
            if (ing == "good") a[7].a++;
            else a[7].a--;
        }
        if (str == "pirateship") {
            if (ing == "good") a[8].a++;
            else a[8].a--;
        }
        if (str == "rollercoaster") {
            if (ing == "good") a[9].a++;
            else a[9].a--;
        }
        if (str == "shootinggame") {
            if (ing == "good") a[10].a++;
            else a[10].a--;
        }
    }
    int e = 0;
    for (int i = 1; i <= 10; i++) {
        if (a[i].a >= 0){
            b[i].a = a[i].a;
            b[i].str = a[i].str;
            e++;
        }
    }
    stable_sort(b+1, b + n+1, cmp);
    cout << b[1].str;
    for (int i = 2; i <= e; i++) {
        cout <<">>>"<< b[i].str;
    }
    return 0;
}
2 个赞

有巨佬吗???
救救我
@鲁子涵 @乔子迅

2 个赞

作为资深上课摸鱼蒟蒻认为
虽然不会(但是还是挖出来了 一点点思路
这题是不是排序,排序就要用sort,感觉你这个代码RE和排序
有关系
大型WA代码

不用那么多if,for循环多点即可
cin>>n;
for(int i = 1; i <= n; i++) {
	cin>>a[i].name>>a[i].gb;
}
for(int i = 1; i<=n; i++) {
	if(a[i].gb == “good”) {
		a[i].popular++;
	} else if(a[i].gb == “bad”) {
		a[i].popular–;
	}
}
for(int i = 1; i<=10; i++) {
	for(int j = 1; j <= n; j++) {
		if(b[i].name == a[j].name) {
			b[i].popular = b[i].popular+a[i].popular;
		}
	}
}
for(int i = 1; i <= 10; i++) {
	if(b[i].popular < 0) {
		cont++;
	}
}
stable_sort(b+1,b+n+1,cmp);
for(int i = 1; i <= 10-cont; i++) {
	cout<<b[i].name<<“>>>”;
	if(i == 10-cont) cout<<b[i].name;
}
2 个赞

???
什么意思

2 个赞

没,我也是WA(悲

2 个赞

等巨佬吧

2 个赞

@巨佬们,帮帮忙呗

2 个赞

@王浩然

2 个赞

@鲁子欣 你把for循环里在嵌套一个for循环,你其实只需要一个if判断,还有,你stable_sort里的数据范围错了改一下,<–注意审题(俩边)–>,你的cmp也错了

1 个赞

???

2 个赞

伪代码:

struct abb{
int r;
string n;
}a[11];
bool cmp(abb a,abb b){
  if(a.r==b.r){
    return 如果评分一样,按名字排序;
  }else{
    return 按评分排序;
  }
}
int main(){
  int n,cnt=0;
  string nam,gb; 
  初始化游乐园设施名称
  for(int i=0;i<10;i++){
    初始化评分
  }
  cin>>n;
  for(int i=0;i<n;i++){
    输入
    for(int i=0;i<10;i++){
      if(如果储存的名字等于输入的名字){
        if(评分好坏){
          a[i].r++;
          break;
        }else{
          a[i].r--;
          break;
        }
      }
    }
  }
  sort排序
  for(int i=0;i<10;i++){
    if(a[i].r>=0){
      记录可输出数据的数量(辅助输出(>>>的部分))
    }
  }
  for(int i=0;i<10;i++){
    if(a[i].r>=0){
      输出
    }
    if(cnt>1){
      cout<<">>>";
      cnt--;
    }
  }
  return 0;
}
1 个赞

@鲁子欣 提问请发到问题讨论区,发在常规的将会被删帖。

1 个赞

好的

2 个赞

啊?

1 个赞

咋发

1 个赞

@苍穹一粟 我没法发问题讨论区权限

1 个赞

@鲁子欣 不是有标签可以改吗?

1 个赞