milktemp.in
输出文件:
milktemp.out
简单对比
你可能已经听说了金发姑娘和3只熊的经典故事。
鲜为人知的是,金发姑娘最终经营了一个农场。在她的农场,她有一个谷仓含N头奶牛(1<=N <= 20000)。不幸的是,她的奶牛对温度相当敏感。
第i头奶牛必须在指定的温度范围内A(i)..B(i)才感觉舒适;(0<=A(i)<=B(i)<= 1,000,000,000)。如果金发姑娘在谷仓放置一个温控器;如果温度TB(i),牛会感觉很热,并将产生的Z单位牛奶。正如预期的那样,Y的值总是大于X和Z。
给定的X,Y,和Z,以及每个牛的温度的最佳范围,如果金发姑娘设置谷仓的温控器最佳,请计算金发姑娘得到牛奶的最大数量,已知X,Y和Z都是整数,范围0..1000。温控器可以设置为任意整数的值。
第1行:四个用空格隔开的整数:N X Y Z。
第2行..1 + N:行1+i包含两个用空格隔开的整数:A(i)和B(i)。
1行:金发姑娘最多可以获得的牛奶,当她在谷仓的最佳温度设定。
4 7 9 6 5 8 3 4 13 20 7 10
31
在农场里有4头奶牛,温度范围5..8,3..4,13..20,10..7。一个寒冷的奶牛生产7单位的牛奶,一个舒适的奶牛生产9个单位的牛奶,一个热牛生产6单位牛奶。
50%的测试数据:n<=5
其余50%的测试数据:10000 USACO 2013 November Contest, Bronze 这道题利用差分的思想, 无非只有三个区间: 1: [1, A(i)-1] 在c[0]的位置加上x; 2: [ A(i), B(i)] 在c[A(i)] 的位置上加上y-x; 3: [B(i)+1, n ] 在B(i)+1的位置上加上z-y; 这样,查询某个温度的前缀和,就是奶牛在这个温度产生的牛奶量; 但是, A(i)与B(i)的范围太大, N 又那么小, 所以我们不难想到用离散化; 观察以上区间,其实只有三个点有用,0, A(i), B(i)+1, ;这三个点完全可以代替这三个区间; 所以我们只需保留A(i),B(i)的相对位置就行, 就是不用知道具体多大, 比他大的还在他后面,比他小的还在他前面; 这就是所谓的离散化;(本蒟蒻的见解) 因为每个A(i),B(i)+1, 要加的值是一样的,所以A(i), B(i)的顺序打乱后并不影响结果,这样就可以把他们排序,以便离散; 代码来也: 【来源】
#include