【Codeforces】964B Messages【乱搞】

【Codeforces】964B Messages【乱搞】Messages题目大意:有nnn封信,每封信在tititi到达,到达时价值是AAA,之后每秒价值减去BBB

Messages


题目大意:
n n 封信,每封信在
ti

t i
到达,到达时价值是 A A ,之后每秒价值减去
B

B
。如果在 TT(TT>=ti) T T ( T T >= t i ) 时刻读这封信,那么你将获得的价值是 AB(TTti) A − B ∗ ( T T − t i ) 。每秒你会获得一个价值,这个价值是 Ck C ∗ k k k 表示当前未读的信件数量。每秒钟你能读无限封信,也能不读信,但是所有信必须在T秒内读完,问你最后获得的最大价值。
题解
其实这题很简单,我们可以知道没封未读的信会获得的代价是
(CB)(TTti)

( C B ) ( T T t i )
因为你每封信都需要读,所以每晚一秒读,你将损失B,但是你会获得C的代价(每封信都是这样)。
所以我们分类讨论

  • C<B :我们肯定让它一收到就读,毋庸置疑。
  • C=B :我们可以在任何时刻读。
  • C>B :我们肯定在T这个时刻读。
    (想一下就能懂)

所以 C<=B C <= B 时答案就是 ans=nA a n s = n ∗ A
如果 C>B C > B 那么就在 nA n ∗ A 的基础上加上 (CB)(Ta[i]) ( C − B ) ∗ ( T − a [ i ] ) 就可以了。

代码如下

#include<cstdio> using namespace std; int n,A,B,C,T,a[1005],ans; int main(){ scanf("%d%d%d%d%d",&n,&A,&B,&C,&T); for(int i=1;i<=n;i++) scanf("%d",&a[i]); ans=n*A; if(B<C){ for(int i=1;i<=n;i++) ans+=(C-B)*(T-a[i]); } printf("%d\n",ans); return 0; }

今天的文章
【Codeforces】964B Messages【乱搞】分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/60690.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注