刷过一题之打水漂

打靶大牛goleenuoer可喜欢打水漂了,他的靶子可以打到河面上的任何一条鱼,可是他的水漂打得实在是烂,无论怎么打那石子只会在河面上跳跃两次就“扑通”了。这天他又来打水漂了,这条宽w米,每隔一米都会有一条鱼,每条鱼都有它的美观值,他想知道如何打才能得到两条鱼之间最大的美观值总和。

 

输入:

第一行仅包括为一个整数n,表示共有n条鱼(他们的位置点分别为0到n-1)第二行包括n个数(两两之间用一个空格分隔),依次为n条鱼的美观值。

 

输出:

一行包括三个数,分别表示石子的起点、石子的落点和所得到的两条鱼之间美观值总和,如果美观值总和为负数时输出0。(不包括落点的鱼)

 

输入示例:

10
5 8 -5 -10 5 1 -3 2 4 2

 

输出示例:

0 2 13

 

 

数据范围:1<=n<=10000,-500<鱼的美观值范围为<500

 

没什么好说的,前缀和水过……

 1 #include<iostream>
 2 using namespace std;
 3 int posi,posj,ans;  //分别记录石子的起点、落点和最大的美观值 
 4 int main()
 5 {
 6     int i,n,pos=0,tmp=0,a[10001];
 7     cin>>n;
 8     for(i=1;i<=n;i++)
 9     {
10         cin>>a[i]; //第i条鱼的美观值为a[i]
11         tmp+=a[i]; //将第i条鱼的美观值累加 
12         if(tmp>ans){ans=tmp;posj=i;posi=pos;} //暂时记录起点和终点 
13         else if(ans<=0){pos=i+1;ans=0;}//如果美观值非正,重置起点 
14     } 
15     if(ans==0)cout<<0;
16     else cout<<posi<<" "<<posj<<" "<<ans;
17     //system("pause>nul");
18     return 0;
19 }

 

转载于:https://www.cnblogs.com/nightfury/p/5040946.html

### 关于打水漂仿真的技术实现 #### 物理模型基础 在进行打水漂仿真时,核心目标是对物体与水面相互作用的物理过程建模。这通常涉及流体力学中的表面张力效应、重力加速度以及动量守恒定律的应用。对于简单的二维平面波传播现象,可以通过离散化的方法来近似描述水面波动的效果[^3]。 以下是基于引用中提到的技术细节所扩展的内容: 1. **初始条件设置** - 假设石头以一定初速度 \(v_0\) 和角度 \(\theta\) 抛入水中,则其运动轨迹可由抛物线方程表示: \[ y(t) = v_{0}t\sin{\theta}-\frac{1}{2}g t^{2} \] 当 \(y(t)\leqslant h_w\) (\(h_w\) 表示水面高度)时发生碰撞事件。 2. **接触瞬间处理** - 接触点处的速度分解成垂直和平行分量,其中平行方向上的动能部分会被保留用于后续滑移动作;而垂直向下的冲击则转化为局部扰动源引发涟漪扩散。 3. **波动传播机制** - 使用有限差分法求解浅水波方程组或者直接调用成熟的数值库函数完成整个系统的动态演化分析。例如,在给定网格尺寸下更新每一时间步长内的位移场状态变量\[wave1[]\]. ```cpp void simulateWavePropagation(float deltaTime){ float dampFactor=0.98f; for(int i=stoneSize;i<WIN_HEIGHT-stoneSize;i++){ for(int j=stoneSize;j<WIN_WIDTH-stoneSize;j++){ float new_val=(wave1[(i+1)*WIN_WIDTH+j]+wave1[(i-1)*WIN_WIDTH+j]+wave1[i*WIN_WIDTH+(j+1)]+wave1[i*WIN_WIDTH+(j-1)])*dampFactor/4-wave2[i*WIN_WIDTH+j]; wave2[i*WIN_WIDTH+j]=new_val; } } std::swap(wave1,wave2); } ``` 此代码片段展示了如何通过邻域平均的方式推进下一帧的状态,并引入轻微阻尼因子减少高频噪声积累问题。 --- ### 高级优化建议 如果追求更真实的视觉体验还可以考虑加入额外因素比如风速影响或是非均匀介质特性调整衰减系数分布等等复杂情况下去完善整体框架结构设计思路[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值