贪心(结构体排序且同时对编号进行排序)

这题的重点是发现规律,需要手动推导出A要从小开始

#include <bits/stdc++.h>
using namespace std;
struct nodea {//a道具,id表示道具,w是增加量
    int id, w;//id把输入的编号纪录住了!!!
}a[100005];
struct nodeb {//b道具
    int id, w;
}b[100005];
bool cmp1(nodea a, nodea b)//同时给对应的编号记录!!!!!!!
{
    if (a.w != b.w) return a.w < b.w;//先对A的增加量排序,从小到大
    else return a.id < b.id;//再按字典序id排序
}
bool cmp2(nodeb a, nodeb b)
{
    if (a.w != b.w)  return a.w > b.w;
    else return a.id < b.id;
}
int main()
{
    int n1, n2;
    cin >> n1 >> n2;
    for (int i = 1; i <= n1; i++) cin >> a[i].w, a[i].id = i;
    for (int i = 1; i <= n2; i++) cin >> b[i].w, b[i].id = i;
    sort(a + 1, a + 1 + n1, cmp1);
    sort(b + 1, b + n2 + 1, cmp2);
    string s;
    cin >> s;//输入字符串
    int idx1, idx2;
    idx1 = idx2 = 1;
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] == '1') {
            cout << "B";
            cout << b[idx1++].id << endl;//此时未排序前对应的下标已经排序好了,直接自增就行
        }
        else {
            cout << "A";
            cout << a[idx2++].id << endl;
        }
    }
    cout << "E" << endl;
    return 0;
}
全部评论

相关推荐

面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
码农索隆:别去东软,真学不到东西,真事
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务