• b_pat_魔术优惠卷 & 坏掉的键盘(排序+双指针)


    Magic Coupon

    每个优惠券上都印有一个整数 N,当你将此优惠券用于产品时,商店会给你 N 倍于该商品价值的钱。
    现在,给定你若干的优惠券和若干的商品,每个优惠券和商品最多只能选择一次,请问你最多可以从商店里拿回多少钱。

    方法一:排序+双指针

    思路
    对两个数组排序:

    • 对于负数和负数直接相乘即可(因为两个较小的负数相乘的结果最大);
    • 而对于负数和正数这种组合,则需要将负数过滤掉;然后确保后面的数对都是正数,最后从后往前累加正数对的乘积(贪心)
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+5;
    
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        ll n,m,C[N], P[N];
        cin>>n; for (int i=0; i<n; i++) cin>>C[i];
        cin>>m; for (int i=0; i<m; i++) cin>>P[i];
        
        sort(C, C+n), sort(P, P+m);
        ll ans=0, i=0, j=0;
        while (i<n && j<m && C[i]<0 && P[j]<0) ans+=C[i++]*P[j++];
        while (i<n && C[i]<=0) i++;
        while (j<m && P[j]<=0) j++;
        
        int ii=n-1, jj=m-1;
        while (ii>=i && jj>=j) ans+=C[ii--]*P[jj--];
        cout<<ans;
        return 0;
    }
    

    Broken Keyboard

    当你输入一些句子时,与坏掉的按键相对应的字符将不会出现在屏幕上。
    现在给定你应该键入的字符串以及你实际键入的字符串,请找出哪些按键坏了。

    思路
    首先,要找的字符一定在a中,a和b的字符无非等和不等:

    1. a[i]=b[i] 表示都打出来了
    2. 否则,视 a[i] 为坏掉的键,输出即可(注不能输出多次同一个字符)
    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        string a,b; cin>>a>>b;
        int n=a.size(), m=b.size(), i=0, j=0, st[200]; memset(st, false, sizeof st);
    
        while (i<n) {   //m≤n
            char u=toupper(a[i]), v=toupper(b[j]);
            if (u==v) { //相同代表都打出来了
                j++;
            } else if (!st[u]) {
                st[u]=1, cout<<u;
            }
            i++;
        }
        return 0;
    }
    
  • 相关阅读:
    Python random模块下的常用函数小结
    MySQL 数据库连接
    LeetCode 376. 摆动序列 做题小结
    LeetCode 1005. K 次取反后最大化的数组和 做题小结
    LeetCode 455. 分发饼干 做题小结
    完美解决Python与anaconda之间的冲突问题
    LeetCode 122. 买卖股票的最佳时机 II 做题小结
    LeetCode 714. 买卖股票的最佳时机含手续费 做题小结
    如何去除有道云笔记广告(windows)
    baby web
  • 原文地址:https://www.cnblogs.com/wdt1/p/13716392.html
Copyright © 2020-2023  润新知