首页 > 其他分享 >CF521D Shop

CF521D Shop

时间:2023-04-30 21:12:17浏览次数:49  
标签:Shop int mul 加法 操作 赋值 id CF521D

CF521D Shop

注意到选定的操作数可以少于 \(m\),因此所有对乘积有负贡献的操作直接扔掉(在本题中,只有满足 \(b_i < a_i\) 的赋值操作对乘积是负贡献的)。

假设我们框定了选择的操作集合,如何决定顺序?

先做所有赋值操作,再做所有加操作,再做所有乘操作是最优的,而每种类型操作内部的顺序无所谓。

对每个数而言,只进行一次赋值操作就行了。那么对每个数只需要保留对其赋的值最大的那个操作。这样以来,对每个数的赋值都是相对于原数而言的,那么可以直接转换成对第 \(i\) 个数加 \(b_j - a_i\) 的加法操作(假设 \(j\) 是这个赋值操作的编号)。

现在变成只有加和乘的操作了。

假设我们给第 \(x\) 个数分配了 \(p\) 个加法操作,我们一定是取对 \(x\) 的所有加法操作中的前 \(p\) 大。因此考虑对每个数的加法操作降序排列,我们一定优先选择对 \(x\) 加最大的那个操作,再选择对 \(x\) 加第二大的那个操作……

这样以来,对每个数的加法操作,也是相对于对这个原数再进行了比这个加法操作加的更多的所有加法操作后的数(不妨设为 \(s\))而言的,于是进行这个操作之前这个数的具体值就确定是 \(s\) 了。假设这个加操作编号为 \(j\),则加上 \(b_j\) 可以直接转化为乘上 \(\dfrac{s + b_j}{s}\) 的乘法操作。

最后只有乘操作,选择乘操作的前 \(m\) 大即可。当然,最开始扔掉负贡献操作后剩余非负贡献操作数量可能不超过 \(m\),这个时候全选即可。

注意到加法转乘法中可能会出现分数。观察 \(\dfrac{s + b_j}{s}\) 这个分式,\(s\) 为 \(n \times b\) 量级,最多达到 \(10^{11}\)。所以可以直接按照浮点数记录比较大小(精度 \(10^{-11}\) 可以接受)。

或者按照 \(\dfrac{a}{b} < \dfrac{c}{d} \iff ad < bc\) 比较,这样计算中间值达到 \(10^{22}\),无法接受。可以考虑给每个比例减个 \(1\),这样每个加转乘的比例式变成 \(\dfrac{b_j}s\),分子不超过 \(10^6\),分母不超过 \(10^{11}\),计算中间值达到 \(10^{17}\),是可以接受的。注意原来那些乘法操作的比例也要减 \(1\)。

为什么赋值不能直接转乘法?

刚刚已经推得一定存在一个最优解使得每个变量都是被按照先赋值,再加,最后乘来操作的。赋值转加法,就会变成先加,再加,最后乘,很明显前两步可以合并;而赋值转乘法会变成先乘,再加,最后乘,这就没法处理了。

/*
 * @Author: crab-in-the-northeast 
 * @Date: 2023-04-30 20:08:14 
 * @Last Modified by: crab-in-the-northeast
 * @Last Modified time: 2023-04-30 20:27:31
 */
#include <bits/stdc++.h>
#define int long long
inline int read() {
    int x = 0;
    bool f = true;
    char ch = getchar();
    for (; !isdigit(ch); ch = getchar())
        if (ch == '-')
            f = false;
    for (; isdigit(ch); ch = getchar())
        x = (x << 1) + (x << 3) + ch - '0';
    return f ? x : (~(x - 1));
}

const int maxk = (int)1e5 + 5;
const int maxn = (int)1e5 + 5;
typedef std :: pair <int, int> pii;

int a[maxk], tp[maxn];
pii asi[maxk];

struct node {
    int id, x, p, q;
    bool operator < (node b) {
        return p * b.q > b.p * q;
    }
};

signed main() {
    int k = read(), n = read(), m = read();
    std :: vector <node> add, mul;
    for (int i = 1; i <= k; ++i)
        a[i] = read();
    for (int i = 1; i <= n; ++i) {
        int t = read(), x = read(), v = read();
        tp[i] = t;
        if (t == 1)
            asi[x] = std :: max(asi[x], std :: make_pair(v, i));
        else if (t == 2)
            add.push_back({i, x, v, 1});
        else
            mul.push_back({i, x, v - 1, 1});
    }

    for (int i = 1; i <= k; ++i)
        if (asi[i].first > a[i])
            add.push_back({asi[i].second, i, asi[i].first - a[i], 1});
    
    std :: sort(add.begin(), add.end());
    for (node o : add) {
        int id = o.id, x = o.x, p = o.p;
        mul.push_back({id, x, p, a[x]});
        a[x] += p;
    }
    
    std :: sort(mul.begin(), mul.end());
    m = std :: min(m, (int)mul.size()); 
    std :: sort(mul.begin(), mul.begin() + m, [](node a, node b) {
        return tp[a.id] < tp[b.id];
    });

    printf("%lld\n", m);
    for (int i = 0; i < m; ++i)
        printf("%lld ", mul[i].id);
    puts("");
    return 0;
}

标签:Shop,int,mul,加法,操作,赋值,id,CF521D
From: https://www.cnblogs.com/crab-in-the-northeast/p/cf521d.html

相关文章

  • Java代码虾皮item_search-根据关键词获取商品列表 API 接口(title商品标题、pic_url宝
     Shopee是东南亚最大的电商平台之一。Shopee拥有商品种类,包括电子消费品、家居、美容保健、母婴、服饰及健身器材等。做好shopee店铺需要注意以下几点:1.选择优质的产品2.每日上新产品3.营销策略4.引流策略5.发货的地点Java代码操作示例importjava.io.BufferedReader;impo......
  • 逼真的刺绣Photoshop插件-Realistic Embroidery 3.0汉化版 Win/Mac版通用
    使用RealisticEmbroidery3.0插件只需单击几下,即可将文本、徽标或形状转换为逼真的刺绣/缝合元素。逼真的刺绣3现在是一个完整的Photoshop插件,具有界面、改进的工作流程和许多新功能,将使您的数字缝纫体验更加美好!如图所示,自己体验吧!Bevel我翻译成的倒角,或许有其他更好的翻译,自己......
  • Photoshop简介
     1.界面介绍导航菜单标题栏工具条浮动面板 2.创建文件导航菜单-文件-新建名称(可以改)宽度、高度(是像素px)背景内容透明(会在背景出现灰白格)白色 3.图层创建新图层-图层浮动面板下方,垃圾桶旁边的折角纸图案就是新建图层新建的图层会在上一个就图层上方(默认)图......
  • 跨境电商虾皮shoppe和lazada商品详情API接口
    虾皮跨境电商接口“虾皮跨境电商接口”,又称虾皮“eTaobao”,是阿里巴巴旗下国际站虾皮网,联合淘宝官方API、以及虾皮自有技术进行开发的一款跨境电商接口服务。其核心目的是提供便捷的淘宝API调用,将淘宝平台上的宝贝信息(包括商品的分类,价格,图片等)及淘宝API,被完美的适应跨境电商接......
  • photoshop 2022 新功能介绍,ps2021最新版下载mac/win
    ps2021最新版下载Mac版win版 photoshop2022新功能介绍选取主体云端服务在Photoshop2022年8月(23.5版)中,透过我们的「选取主体」云端服务,获得比在装置上进行「选取主体」处理更细致、品质更好的影像。若要使用「选取主体」云端服务,请执行下列任一操作:浏览至「偏好......
  • Adobe Photoshop 2023(MAC+Windows) +AI插件auto Photoshop stable diffusion plugin
    Adobe图像处理软件Photoshop2023正式版(24.1.1)2023年01月版发布。AdobePhotoshop2023破解版(简称PS)是一款全球流行的专业图像处理软件及照片和设计软件。AdobePhotoshop中文破解版是AdobeCreativeCloud创意云桌面程序中心的图形设计软件热门产品,它是平面设计领域和数......
  • Meerkat 2021 pulsar timing workshop 学习笔记(一)
    Thejoyofpulsars,byProfMatthewBaile,SwinburneUniversityofTechnologyhttps://www.youtube.com/watch?v=qG_hMzTCEX4&t=988s笔记不保证正确性(英语不行),最好观看原视频 1.引力天才们伽利略,第一个把望远镜指向天空的人,发现了木星有卫星开普勒,为行星绕太阳绕选给出了严......
  • UVA10237 Bishops
      #include<iostream>#include<cstring>#include<queue>usingnamespacestd;constintN=2e5+2;#defineintlonglongintn,m,f1[50][2000],f2[50][2000];voidsov(){ memset(f1,0,sizeoff1);memset(f2,0,sizeoff2); f1[0][0]=f2......
  • 图像处理Photoshop 2023(ps2023)v24.2中文mac版
    Photoshop2023(ps2023)图像处理v24.2中文版,我们对它进行了改进。新的设置菜单将提供更好的操作。增强了对图像处理功能的支持。新增了“使用Photoshop在多个平台间移动图像”功能。新的编辑界面更简单了。→→↓↓载Photoshop2023Mac版 1.全新的设置菜单对新版本的设......
  • ECShop开源商城与COS互通:降低本地存储负载、提升访问体验
    ECShop简介ECShop是一款开源电子商务平台,具有简单易用、安全稳定、模块化设计等特点。它提供了完整的电子商务解决方案,包括商品管理、订单管理、支付管理、配送管理、会员管理、促销管理、数据统计等功能。ECShop支持多语言、多货币、多种支付方式和配送方式,并可通过插件扩展更多......