洗衣服

【题目描述】

有 n n n 个人来到 B B BB BB家里洗衣服,第 i i i个人的到达时间是 t i t_i ti​。

不幸的是, B B BB BB 家里只有一个洗衣机。

因此,同一时刻如果有多个人一起洗衣服的话,只能有一个人使用洗衣机,其他人只能手洗。

洗衣机洗一个人的衣服需要 x x x 的时间。

所有人手洗的速度是一样的,洗自己的衣服需要 y y y 的时间。

一个人的衣服不能在洗到一半的时候更换洗的方式。

给定 x x x 和 m m m,对于 y = 1 , 2 ⋯ , m y=1,2\cdots,m y=1,2⋯,m,分别求出所有人都洗完衣服的最早时刻。

【输入数据】

第一行三个整数 n n n, x x x, m m m。

第二行 n n n 个整数 t 1 − t n t_1 {-} t_n t1​−tn​。

【输出数据】

记 y = i y=i y=i 时答案为 a n s i ans_i ansi​,输出一行一个整数 ( a n s 1 ) ⊕ ( 2 × a n s 2 ) ⊕ ( 3 × a n s 3 ) ⊕ ⋯ ⊕ ( m × a n s m ) (ans_1)\oplus(2\times ans_2)\oplus(3\times ans_3)\oplus\cdots\oplus(m\times ans_m) (ans1​)⊕(2×ans2​)⊕(3×ans3​)⊕⋯⊕(m×ansm​)

其中 ⊕ \oplus ⊕为计算机中的异或操作

【样例输入】

4 2 10
1 2 2 3

【样例输出】

113

【样例解释】

压缩前的答案为

4 5 5 6 7 8 8 9 9 9

【数据范围】

对于 5 % 5\% 5%的数据, n , m ≤ 10 n,m\leq 10 n,m≤10。

对于 25 % 25\% 25%的数据, n , m ≤ 1000 n,m\leq 1000 n,m≤1000。

对于 50 % 50\% 50%的数据, n ≤ 1 0 5 n\leq 10^5 n≤105。

对于另外 20 % 20\% 20% 的数据, n ≤ 1 0 6 n\leq 10^6 n≤106, m − x ≤ 20 m-x\leq 20 m−x≤20。

对于 100 % 100\% 100%的数据, 1 ≤ n , x , m ≤ 1 0 7 1\leq n,x,m\leq 10^7 1≤n,x,m≤107, 1 ≤ t i ≤ 1 0 9 1\leq t_i\leq 10^9 1≤ti​≤109, t i ≤ t i + 1 t_i\leq t_{i+1} ti​≤ti+1​


对于此题,首先可以考虑一个人使用了洗衣机之后对后面的人造成的影响,但是会发现这样不太好维护,因为存在第 i − 1 i-1 i−1个人使用手洗时间比第 i i i个人机洗要慢的情况。

但是,如果知道了之后有多少个人会使用洗衣机,这样的话就能倒序计算出答案了。

第 n n n个人使用了洗衣机会让答案至少为 t n + x t_n+x tn​+x,第 n − 1 n-1 n−1个人使用洗衣机会让答案至少为 t n − 1 + 2 x t_{n-1}+2x tn−1​+2x, ⋯ \cdots ⋯,第 i i i个人使用了洗衣机会使答案至少为 t i + ( n − i + 1 ) x t_i+(n-i+1)x ti​+(n−i+1)x。那么最终的答案就是 m a x ( t [ i ] + m i n ( y , ( n − i + 1 ) x ) ) max(t[i]+min(y,(n-i+1)x)) max(t[i]+min(y,(n−i+1)x))

但是直接枚举会使得复杂度为 O ( n m ) O(nm) O(nm)

考虑如何优化:

利用数学知识:

先将答案用分段函数的形式表达出来:

a n s [ i ] = m i n { t [ i ] + ( n − i + 1 ) x t [ i ] + y ans[i]=min \left\{\begin{aligned} t[i]+(n-i+1)x \\t[i]+y \end{aligned}\right. ans[i]=min{t[i]+(n−i+1)xt[i]+y​
将函数绘出可以得到此图:


将每一个不同的有关 y y y的分段函数绘出然后综合,对于每一个 y y y,最终函数图像上的最高点即为对应 y y y的答案。

对应的代码为:

for(int i=1;i<=n;i++)
{t=read<int>();ll tmp=1LL*(n-i+1)*x;if(tmp>m) {ans[m]=max(ans[m],t+m);}else{ans[tmp]=max(1LL*ans[tmp],t+tmp);}
}

求出最高点之后再想办法求出函数,可以采用标记左下方的点的方法

先倒序枚举:

for(int i=m;i>=1;i--)
{ans[i]=max(ans[i+1]-1,ans[i]);
}

但是存在一种两个点在同一条斜率为零的线的情况:

画个图解释就是:

所以需要在再在最后统计答案的时候进行修正:

int k=ans[1];
for(int i=1;i<=m;i++)
{k=max(k,ans[i]);ans^=1LL*k*i;
}

然后就成功将 O ( n m ) O(nm) O(nm)的算法优化成了 O ( n + 2 m ) O(n+2m) O(n+2m)的

完整code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int twx=1e7+100;
const int inf=0x3f3f3f3f;
int n,x,m;
int t;
int ans[twx];
ll ANS;
char buf[1<<20],*p1,*p2;
#define getchar() ((p1==p2)&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
template<class T>
T read()
{T r=0;int w=0,c;for(;!isdigit(c=getchar());r=c);for(w=(c^48);isdigit(c=getchar());w=w*10+(c^48));return r^45?w:-w;
}
void init()
{n=read<int>();x=read<int>();m=read<int>();for(int i=1;i<=n;i++){t=read<int>();ll tmp=1LL*(n-i+1)*x;if(tmp>m) {ans[m]=max(ans[m],t+m);}else{ans[tmp]=max(1LL*ans[tmp],t+tmp);}}for(int i=m;i>=1;i--){ans[i]=max(ans[i+1]-1,ans[i]);}int k=ans[1];for(int i=1;i<=m;i++){k=max(k,ans[i]);ANS^=1LL*k*i;}printf("%lld\n",ANS);
}
int main()
{//freopen("wash.in","r",stdin);//freopen("wash.out","w",stdout);init();return 0;
}

洗衣服wash 题解相关推荐

  1. [基础题]4、设计一个家政服务规范: 洗衣服, 扫地, 买菜, 做饭

    /*4.设计一个家政服务规范: 洗衣服do the Laundry, 扫地Sweep, 买菜Food , 做饭CookMeal  设计一个保姆类 Nanny , 保姆需要遵循这些规范 需求:在测试类中 ...

  2. 生活中的小技巧-2:洗衣机洗衣服打结缠绕,该如何解决?学上几个实用招数

    最近家里领导抱怨洗衣机洗衣服打结缠绕,导致衣服变形,要求更换洗衣间. 初步调研了一番,这是普遍现象,只是不同类型的洗衣打结的程度不同而已. 有没有解决的方法呢?有! 1. 饮料瓶法 这是最经济实惠.最 ...

  3. Problem F. 洗衣服

    Problem F. 洗衣服 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) T ...

  4. 记忆化01背包 我爱洗衣服啊

    I. 我爱洗衣服啊 Zz 非常不喜欢洗衣服,原因就是Zz是一个非常惜时的人,他希望用洗衣服的时间来打代码.不存在的,Zz 就是懒! 由于为了节约大家的时间,学校特意安置了一台洗衣机,所以Zz 可以通过 ...

  5. 古代人用什么来洗衣服?

    古代人洗头发的有皂角或者猪苓.猪苓是富裕些的人才用的,猪苓里加了些香料,用后会有比较浓郁的香气.平常人就用皂角洗头发. 查了一下资料,发现古代人比我们想象中要卫生的多,秦汉时,已形成了三日一洗头.五日 ...

  6. [LOJ 6035] 洗衣服

    一.题目 点此看题 二.解法 其实不难看出可以分步做吧,你先求出洗完所有衣服的最小时间和每件衣服的洗衣时间,这个很容易用优先队列求,优先队列里面按洗完的最小时间排序,先选小的. 然后现在等价的衣服变得 ...

  7. 神奇洗衣机不需要洗涤剂 用机器鱼来洗衣服

    韩国一名设计师从"鱼足疗"中获得灵感发明了一款神奇洗衣机,这款洗衣机不用洗涤剂,而是使用机器人吸污.每条鱼可利用内置摄像头识别灰尘颗粒,然后游过去将其吸收. 韩国设计师Chan Y ...

  8. 给自己生活的TIPS: 洗衣服的好方法

    常见的三种情况: (1)衣服会变黄,多半是荧光剂变弱所致,想要衣物恢复洁白亮丽,就得想法子. 洗米水+橘子皮简单又有效: 保留洗米水或是将橘子皮放入锅内加水烧煮后,将泛黄的衣服浸泡其中搓洗就可以轻松让 ...

  9. 5kb大小的云洗衣机HTML源码 朋友圈在线洗衣服

    介绍: 空调有了 小电视有了 就差洗衣机了 夏天如约而至,不知道屏幕面前的你是否还在为脏衣服过多而烦恼? 今天他来了! 没错是洗衣机,washing machine直接把衣服丢进去,按下开关即可! 网 ...

最新文章

  1. 电子学会 软件编程(图形化)一级训练营
  2. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java
  3. 49字母异位词分组(哈希表)
  4. 规划搜索产品时,我们可以如何着手?
  5. 使用Eclipsephp工具打开Thinkphp为什么会有红色的波浪线报警?
  6. 20145302张薇 《信息安全系统设计基础》第14周学习总结
  7. 指标公式c语言源码下载,自用60分钟指标源码
  8. Fiddler笔记(3)接口测试
  9. python函数进阶小结_Python 函数3000字使用总结
  10. 最新微信视频强制分享系统源码+引流裂变分享
  11. 光纤传输网的发展及其新的分层结构
  12. matter设备调试(Device Commissioning):
  13. 优雅的搜索拼多多优惠券(一)
  14. javascript网页设计作业——初音动漫(6页) dreamweaver作业静态HTML网页设计模板
  15. matlab:基于GUI的作图设计
  16. wps如何放大导航窗格字体
  17. dijkstra算法和A*算法
  18. 无线传感网络 --ZigBee2-3 串口
  19. vue2的堆叠轮播图 (5张图 错开叠加,来回切换)
  20. 几次登上腾讯WE大会的阿尔茨海默研究,会是未来医疗的探路者吗?

热门文章

  1. 5分钟商学院-个人篇-情感能力
  2. 魔术师预测德国彩票号码
  3. 寻迹小车驱动模块电路设计
  4. 幼儿园装备论文计算机网络,计算机专业毕业论文幼儿园网站的设计与维护.doc...
  5. sqlite:微信数据库
  6. 好看的个人主页,导航页HTML源码源码三分钟下载安装
  7. 前端三小时用html和js写一个贪吃蛇游戏,非常简单带讲解,代码可直接用,功能完整
  8. 实锤,PBlaze5实力演绎multiple namespaces 功能(下)
  9. 【ERP】概念_出纳业务、记账、取消记账等
  10. 【阿里云】ssl证书到期更新