贪心-零件加工

题目描述

工匠小K最近有n个零件需要加工。每个零件都需要ti天的时间来完成,每个零件每延迟一天加工都要缴纳一定的罚金si。延迟的天数为从今天算起到该工作开始的那天,第一个零件加工没有罚金。现在小K想知道怎样安排加工顺序可以使他要交的罚金最少,最少是多少。

这个数可能会很大,请输出这个数对m取模后的结果。

输入

输入文件名为process.in

输入第一行为一个整数n,表示需要加工的零件总数。

第二行为一个整数m,表示答案要对m取模。

第3~n+2行,每行两个整数tisi

输出

输出文件名为process.out

输出仅一行,一个整数,表示小K最少要缴纳的罚金对m取模的结果。

样例输入

process.in
2
100
2 33
33 2
process.out
4

process.in
4
100
3 3
6 4
2 2
8 5
process.out
81

这道题第一眼就不会做,于是状压(n<=10)目测爆0

其实这题很水

在模拟第二个样例的时候就能发现先取2,2和先取 3,3 是一样的

我们假设前几个物品花费时间T,

有两个物品时间和罚金分别为t1,t2;s1,s2;

这两个物品的选取顺序和前后面的选取都没有关系

先取第一个为T*s1+(T+t1)*s2=T(s1+s2)+t1*s2

第二个T*s2+(T+t2)*s1=T(s1+s2)+t2*s1

只要判断t1*s2和t2*s1的大小即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long

using namespace std;
const ll N=500005;
struct note{
    ll t,s;
    friend bool operator < (note a,note b)
    {
        return a.s*b.t>a.t*b.s;//sort不能用>=
    }
}poll[N];
ll Time=0,ans=0;
ll n,mod;
ll chen(ll a,ll b,ll pp)
{
    ll  tot=a,ans=0;
     while(b)
     {
         if(b&1)
         ans+=tot%pp;
         b>>=1;
         tot*=2;
         tot%=pp;
         ans%=pp;

     }
     return (ll) ans%pp;
}
int main()
{
    scanf("%lld",&n);
    scanf("%lld",&mod);
    for(ll i=1;i<=n;i++)
    scanf("%lld %lld",&poll[i].t,&poll[i].s);

    sort(poll+1,poll+1+n);
    for(ll i=1;i<=n;i++)
    {
        ans+=chen(Time,poll[i].s,mod);
        ans%=mod;
        Time+=poll[i].t;

    }
    cout<<ans%mod<<endl;
} 
时间: 2024-09-30 07:03:22

贪心-零件加工的相关文章

零件加工 贪心 题解

1019: B06-贪心-零件加工[提高组] 时间限制: 1 Sec  内存限制: 128 MB提交: 24  解决: 7[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 工匠小K最近有n个零件需要加工.每个零件都需要ti天的时间来完成,每个零件每延迟一天加工都要缴纳一定的罚金si.延迟的天数为从今天算起到该工作开始的那天,第一个零件加工没有罚金.现在小K想知道怎样安排加工顺序可以使他要交的罚金最少,最少是多少.       这个数可能会很大,请输出这个数对m取模后的结果. 输入

20170612测试

问题 A: 装果子 时间限制: 1 Sec  内存限制: 128 MB提交: 96  解决: 54 题目描述 果园里有n颗果树,每棵果树都有一个编号i(1≤i≤n).小明已经把每棵果树上的果子都摘下来堆在了这棵树的下方,每棵树下方的果子体积为ai. 现在小明将拿来m个袋子把这些果子都装进袋子里.每个袋子的体积为v.小明会按照如下规则把果子装进袋子里: (a)从第1棵果树开始装起,由1到n一直装到第n棵果树. (b)如果这棵果树下的果子能全部装进当前这个袋子,就装进去:如果不能,就关上当前这个袋子

解一元一次方程

实际问题与一元一次方程 一般步骤:1.审.审清题意,   2.设.设未知数   3.列.根据等量关系列方程   4.解.解方程   5.答.写出答案 解一元一次方程一般步骤:   1.去分母   2.去括号   3.移项   4.合并同类项   5.化系数为1 题1:有一批零件加工任务,甲单独加工需要20小时,乙单独加工需要10小时,甲加工了一部分后另有任务,剩下的任务由乙单独完成,乙比甲少加工了5小时,求甲加工了几个小时? 设 甲加工了  (x+5)小时 乙加工了 x小时 x/10 + (x

jQuery/CSS3类似阿里巴巴的商品导航菜单实现教程

有两天没发表文章了,今天来说说利用jQuery和CSS3制作一款类似阿里巴巴左侧商品菜单导航,这款菜单看起来非常大气,可以展示非常多的产品类目,如果你在设计电子商务网站,不妨可以拿来参考,一下是效果图: 我们也可以到这里来查看这款菜单的DEMO演示. 接下来还是分析一下源代码,源码由HTML.CSS和jQuery组成,先来看看HTML,东西很多,但结构非常简单: <div class="sidebar"> <div class="sidebar_top si

FTI.v5.4.for.CATIA.V5R22-R25金属薄板软件

CD-ADAPCO.STAR-CCM+10.06.010.WIN.LINUX.64BIT新一代通用计算流体力学(CFD)分析软件 CSI.SAFE.V2014.1.1中文版 结构和建筑软件 DELCAM.FEATURECAM.2016.R2机械加工软件 CONCEPTS.NREC.SUITE.V8.4.9.0(AXCENT,AXCENT,AXIAL,COMPAL,FANPAL,PUMPAL,RITAL,TURBOMATCH) FTI.v5.4.for.CATIA.V5R22-R25 MSC.DY

籍工作助你避免犯错误CSoft.PlanTracer.Pro.v7.0.2870.1658.662

地籍工作助你避免犯错误CSoft.PlanTracer.Pro.v7.0.2870.1658.662     它支持自动生成的数据包发送AIS GKN电子签名卸货.该程序允许您执行地籍工作的会计对象的任何复杂度和体积,如多回路,集成或扩展的对象,由成千上万的轮廓和特征点组成.这个软件不仅容易产生必要的文件,而且还可以帮助你避免犯错误.图形编辑器包含一个独特的功能,用于与地面,应急计划和线性网络,以及用于处理和识别扫描图像的工具.plantracer亲的一系列专业工具地籍工程师的旗舰产品,旨在创造

A - ACM Computer Factory - poj 3436(最大流)

题意:有一个ACM工厂会生产一些电脑,在这个工厂里面有一些生产线,分别生产不同的零件,不过他们生产的电脑可能是一体机,所以只能一些零件加工后别的生产线才可以继续加工,比如产品A在生产线1号加工后继续前往生产线2号继续加工,直到成为完全产品.输入 P 意思是这个电脑需要P个零件,N表示有N个生产线,每个生产线都有最大加工量,并且需要什么零件和输出的是什么零件,0表示没有这个零件,1表示有这个零件,2表示有没有都可以. 样例说明: 3 4 1号: 15 0 0 0 --> 0 1 0 2号: 10

毕业设计课题大全

标题: 交换机端口数据流量信息采集方法评述(1人) 目的: 本题目意在通过检索"截获交换机封包"的相关资料,研究对交换机端口流量进行实时监测的手段和方法及实现的原理. 内容:论文要求分析交换机内部封包的交换和计数原理,进而探查如何通过局域网络监测交换机端口的实时流量信息. 参考资料:思科CCNA和CCNP认证教材,及相关参考资料 计算机专业毕业设计题目大全 http://blog.renren.com/share/250527820/12343150865 重点考虑: 5.电子邮件服务

实时控制软件第一次作业--CNC软件系统案例分析

1.该系统有哪些强实时功能需求?需要对哪些实时事件进行实时响应,对允许的实时延迟的数量级进行估计. 答:读取处理后文件.轨迹插补计算.伺服控制刀具的控制.工件位置的控制.译码的传输.紧急情况的处理.数据采集和显示等有强实时功能需求.前台程序允许延迟的时长一般在微秒级,后台程序的允许时长一般在毫秒级. 2.如果你是软件设计者,要实现这些实时功能,要设计几个实时任务? 答:①NC程序的编译和预处理  ②解释代码运动轨迹的插补运算  ③轴的位置环控制及与软件PLC  ④外部设备的通信等 3.这几个实时