【计蒜课 每周三题】2023-02-25 唱歌

唱歌

题目描述

ame 是一个可爱的女孩子,她想要唱歌。

一共有 n 首歌,第 i 首歌的长度 ai,同时唱第 i 首歌的满意值为 bi

ame 喜欢的歌满足 aim,同时有 k 首歌 c1,c2,,ck 是 ame 不喜欢的。

其中 1cin,表示编号为 ci 的歌曲 ame 是不喜欢的。

请求出 ame 喜欢的歌中满意值第 p 大的歌曲的编号,如果不存在输出 aaaaaaaaa

输入格式

输入共四行。

第一行输入 4 个正整数 n,m,k,p

第二行输入 n 个正整数 a1,a2,...,an

第三行输入 n 个正整数 b1,b2,...,bn

第四行输入 k 个正整数 c1,c2,...,ck

输出格式

输出共一行,输出满意值第 p 大的歌曲的编号;若不存在,则输出 aaaaaaaaa

数据范围

对于 40% 的数据,有 1n5,1m10,1aim,k=0

对于另外 30% 的数据,有 1n10,0kn,1ai,bi,m100

对于 100% 的数据,有 1n,p1000,0kn,1cin,1ai,bi,m1000,数据保证 bi 互不相同。

题解

首先除去不喜欢的歌,将喜欢的歌曲放入结构体中,再对结构体按照满意程度从大到小排序即可。

参考代码


#include <bits/stdc++.h>

using namespace std;
const int N = 1010;
int a[N], b[N], c[N];
/*
测试用例:
5 5 0 1
1 2 3 4 5
1 2 3 4 5

n=5 首歌
m=5 喜欢的歌长度小于5
k=0 没有不喜欢的
p=1 满意值第一大的是哪首歌

输入每首歌的长度a[i]
输入每首歌的喜欢程度值b[i]

答案:
5
*/

struct Node {
    int id;
    int value;
    const bool operator<(const Node &b) const {
        return value > b.value;
    }
} d[N];
int dl;

int main() {
    // 必须符合计蒜客的输入输出要求,否则不能完成提交!
    freopen("song.in", "r", stdin);
    freopen("song.out", "w", stdout);

    // n首歌,m:喜欢歌的长度a[i]<m,k:不喜欢歌的数量,p:满意值第p大
    int n, m, k, p;
    cin >> n >> m >> k >> p;
    for (int i = 1; i <= n; i++) cin >> a[i]; // 歌的长度
    for (int i = 1; i <= n; i++) cin >> b[i]; // 满意值

    // 超过长度m限制不喜欢
    for (int i = 1; i <= n; i++)
        if (a[i] > m) c[i] = 1;

    // 特殊指定的不喜欢
    for (int i = 1; i <= k; i++) {
        int x;
        cin >> x;
        c[x] = 1; // 不喜欢,当桶用
    }

    for (int i = 1; i <= n; i++)
        if (!c[i]) d[dl++] = {i, b[i]};
    sort(d, d + dl);

    if (d[p - 1].value)
        printf("%d\n", d[p - 1].id);
    else
        puts("aaaaaaaaa");

    return 0;
}
posted @   糖豆爸爸  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2022-02-24 单调队列优化DP问题总结
2020-02-24 天桥区多块磁盘为云平台提供服务的配置文件调试结果
2018-02-24 名师云课
Live2D
点击右上角即可分享
微信分享提示