zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    线程池1-线程池原理
    CompletableFuture 详解
    服务崩溃的本质
    关于C#读取MySql数据时,返回DataTable中某字段数据是System.Array[]形式
    关于VS2010中的TraceDebugging文件夹浅说
    C#更改win7系统时间的代码,以及为什么更改不成功
    在DataColumn.Expression把DateTime转换成String的问题
    C#用委托实现异步,异步与多线程的异同
    DataColumn.Expression提示“...循环引用”的错误
    JDBC插入百万数据,不到5秒!
  • 原文地址:https://www.cnblogs.com/wdt1/p/13716392.html
Copyright © 2011-2022 走看看