权值

【问题描述】:

有一个长度为n的实数序列,,下标从1开始,其中第k个位置的实数为p · (sin(a · k + b) + cos(c · k + d) + 2),sin和cos采用弧度制,其中p,a,b,c,d均为给定的整数。你需要从这个序列中选择两个位置(可以相同),使前边的位置上的数字减去后边的位置上的数字最大。如果选择了两个相同的位置,那么差为0.

【输入】:
一行六个整数p,a,b,c,d,n。

【输出】:
一行一个实数表示最大的差值,保留六位小数。

【输入输出样例】:
weight.in weight.out
100 432 406 867 60 1000 399.303813

【数据范围】:
对于30%的数据,1<=p,a,b,c,d<=1000,1<=n<=1000;
对于全部的数据,1<=p,a,b,c,d<=1000,1<=n<=10^6。

【解题思路】

话说这个题并不需要什么思路。。。暴力循环枚举什么的就好了。不过一定要注意看题目!

【源代码】

 1 program weight;
 2 var p,a,b,c,d,n,maxx,i:longint;
 3     ans,max:real;
 4     f,e:array[1..100000000] of real;
 5 begin
 6     assign(input,'weight.in');
 7     assign(output,'weight.out');
 8     reset(input);
 9     rewrite(output);
10     read(p,a,b,c,d,n);
11     for i:=1 to n do
12     begin
13         f[i]:=sin(a*i + b) + cos(c * i + d);
14         if f[i]>max then
15         begin
16             max:=f[i];
17             maxx:=i;
18         end;
19         e[i]:=f[maxx]-f[i];
20         if e[i]>ans then ans:=e[i];
21     end;
22    writeln(ans*p:0:6);
23    close(input);
24    close(output);
25 end.

 

转载于:https://www.cnblogs.com/wuminyan/p/4743992.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值