牛客练习赛46----E-华华和奕奕学物理

2024-03-17 12:10

本文主要是介绍牛客练习赛46----E-华华和奕奕学物理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先发出题目链接:
链接:https://ac.nowcoder.com/acm/contest/894/E
来源:牛客网
涉及:树状数组


题目如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
此题目有两个变量,时间t和初速度v。由于某一时刻小球a的速度比小球b的速度快,那么在任何时间小球a的速度都比小球b的速度快

由于每一个小球拥有不同的初速度,以及抛出的时间也不同,为了更好的判断两个小球的速度关系,我们可以通过比较两个小球在t=maxt=3e5时的速度,来间接比较两个小球的速度关系。


对于某一次抛球(op=1),输入m,v,t,可以得到此球在maxt=3e5时的速度V=v+g*(maxt-t);
对于某一次询问(op=2),输入v,t,可以求出V=v+g*(maxt-t),那么所询问的球都是当t=3e5时速度小于V的球。

问题在于,如何知道t=3e5时刻速度小于V有哪些球,可以利用树状数组来存某一些重要的值

对于某一个在t1时刻,初速度为v,质量为m的球,那么t2时刻此球的动能ans 1 2 m ( v + ( t 2 − t 1 ) g ) 2 \frac{1}{2}m(v+(t_{2}-t_{1})g)^{2} 21m(v+(t2t1)g)2
2*ans为: m ( v + ( t 2 − t 1 ) g ) 2 m(v+(t_{2}-t_{1})g)^{2} m(v+(t2t1)g)2
展开可得: m ( v 2 − 2 g v t 1 + t 1 2 g 2 ) + m t 2 ( 2 g v − 2 t 1 g 2 ) + m t 2 g 2 m(v^{2}-2gvt_{1}+t_{1}^{2}g^{2})+mt_{2}(2gv-2t_{1}g^{2})+mt_{2}g^{2} m(v22gvt1+t12g2)+mt2(2gv2t1g2)+mt2g2
此球在maxt时的速度 V = v + ( m a x t − t ) ∗ g V=v+(maxt-t)*g V=v+(maxtt)g
令A= m ( v 2 − 2 g v t 1 + t 1 2 g 2 ) m(v^{2}-2gvt_{1}+t_{1}^{2}g^{2}) m(v22gvt1+t12g2),B= m ( 2 g v − 2 t 1 g 2 ) m(2gv-2t_{1}g^{2}) m(2gv2t1g2),C= m g 2 mg^{2} mg2

则对于任意在t时刻抛出,质量为m,初速度为v的球,此球在t2时刻的2*ans为:
A + B t 2 + C t 2 2 A+Bt_{2}+Ct_{2}^{2} A+Bt2+Ct22
对于一系列在t1,t2…tn时刻,质量为m1,m2…mn,初速度为v1,v2…vn的所有球,在t0时刻的2*ans之和为
( A 1 + A 2 + . . . + A n ) + ( B 1 + B 2 + . . . + B n ) t 0 + ( C 1 + C 2 + . . . + C n ) t 0 2 (A_{1}+A_{2}+...+A_{n})+(B_{1}+B_{2}+...+B_{n})t_{0}+(C_{1}+C_{2}+...+C_{n})t_{0}^{2} (A1+A2+...+An)+(B1+B2+...+Bn)t0+(C1+C2+...+Cn)t02


由此,可以以每一个球在maxt的速度V为主键,将每一个的A,B,C三个值分别存放在三个树状数组(tree)里面(树状数组介绍可以看这个博客)

const ll maxn=4e6;//这里maxn代表V的最大可能值,V=v+g*(t2-t1),但是maxn比V的最大值还要大。
const ll maxt=3e5+5;
ll tree[4][maxn]={0};

即对于每次抛球(op=1),输入v,t,m,求出V=v+(maxt-t),然后定点修改树状数组tree[0,1,2][V]

void add(ll tr[],int V,ll mv){for(int i=V;i<=maxn-2;i+=lowerbit(i))tr[i]=(tr[i]+mv)%mod;
}
if(op==1){scanf("%lld%lld%lld",&v,&t,&m);int V=v+(maxt-t)*g;add(tree[0],V,m*(v*v%mod-2*g*v*t%mod+t*t%mod*g%mod*g%mod)%mod);add(tree[1],V,m*(2*g*v%mod-2*t%mod*g%mod*g%mod)%mod);add(tree[2],V,m*g*g%mod);}

对于每次查询(op=2),输入v,t,先求出V=v+(maxt-t),然后求和

ll sum(ll tr[],int V){ll ans=0;for(int i=V;i>0;i-=lowerbit(i))ans+=tr[i];return ans;
}
if(op==2){scanf("%d%d",&v,&t);int V=v+(maxt-t)*g;//在t=3e5时候,此球的速度ll sumv=0;sumv=(sumv+sum(tree[0],V))%mod;sumv=(sumv+sum(tree[1],V)*t%mod)%mod;sumv=(sumv+sum(tree[2],V)*t%mod*t%mod)%mod;printf("%lld\n",(sumv+mod)%mod);}

代码如下:

#include <iostream>
using namespace std;
typedef long long ll;
const ll maxn=4e6;
const ll maxt=3e5+5;
const ll g=10;
const ll mod=1e9+7;
ll tree[4][maxn]={0};
ll q,v,t,m;
int op;
int lowerbit(int x){//lowerbit函数return x&-x;
}
void add(ll tr[],int V,ll mv){//树状数组之单点修改for(int i=V;i<=maxn-2;i+=lowerbit(i))tr[i]=(tr[i]+mv)%mod;
}
ll sum(ll tr[],int V){//树状数组之区间查询ll ans=0;for(int i=V;i>0;i-=lowerbit(i))ans+=tr[i];return ans;
}
int main(){scanf("%lld",&q);while(q--){scanf("%d",&op);if(op==1){scanf("%lld%lld%lld",&v,&t,&m);int V=v+(maxt-t)*g;//在t=3e5时候,此球的速度,由此来判断单点修改的位置//下面三个树状数组用来存上面所说A,B,C的值add(tree[0],V,m*(v*v%mod-2*g*v*t%mod+t*t%mod*g%mod*g%mod)%mod);add(tree[1],V,m*(2*g*v%mod-2*t%mod*g%mod*g%mod)%mod);add(tree[2],V,m*g*g%mod);}else{scanf("%d%d",&v,&t);int V=v+(maxt-t)*g;//判断区间求和的位置ll sumv=0;//下面求多项式(A1+A2+A3+...)+(B1+B2+B3+...)*t+(C1+C2+C3+...)*t*t的值//即求动能之和sumv=(sumv+sum(tree[0],V))%mod;sumv=(sumv+sum(tree[1],V)*t%mod)%mod;sumv=(sumv+sum(tree[2],V)*t%mod*t%mod)%mod;printf("%lld\n",(sumv+mod)%mod);}}return 0;
}

这篇关于牛客练习赛46----E-华华和奕奕学物理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818914

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

Matter.js:Web开发者的2D物理引擎

Matter.js:Web开发者的2D物理引擎 前言 在现代网页开发中,交互性和动态效果是提升用户体验的关键因素。 Matter.js,一个专为网页设计的2D物理引擎,为开发者提供了一种简单而强大的方式,来实现复杂的物理交互效果。 无论是模拟重力、碰撞还是复杂的物体运动,Matter.js 都能轻松应对。 本文将带你深入了解 Matter.js ,并提供实际的代码示例,让你一窥其强大功能

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

JAVAEE初阶第七节(中)——物理原理与TCP_IP

系列文章目录 JAVAEE初阶第七节(中)——物理原理与TCP_IP 文章目录 系列文章目录JAVAEE初阶第七节(中)——物理原理与TCP_IP 一.应用层重点协议)1. DNS2 .NAT3. NAT IP转换过程 4 .NAPT5. NAT技术的缺陷6. HTTP/HTTPS7. 自定义协议 二. 传输层重点协议 1 .UDP协议 2.1.1 UDP协议端格式 2.1.2 UD

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

天然药物化学史话:“四大光谱”在天然产物结构鉴定中的应用-文献精读46

天然药物化学史话:“四大光谱”在天然产物结构鉴定中的应用,天然产物化学及其生物合成必备基础知识~ 摘要 天然产物化学研究在药物研发中起着非常重要的作用,结构研究又是天然产物化学研究中最重要的工作之一。在天然药物化学史话系列文章的基础上,对在天然产物结构研究中起绝对主导作用的“四大光谱”分析技术,即红外光谱、紫外光谱、质谱、核磁共振波谱在天然产物结构鉴定中的应用历史进行回顾与总结,并对其发展

基础物理-向量3

总结 标量和向量 标量,如温度,仅具有大小。它们通过一个带有单位的数字(例如 10°C)表示,并遵循算术和普通代数的规则。向量,如位移,既具有大小又具有方向(例如 5 米,向北),并遵循向量代数的规则。 几何法加向量 两个向量 a ⃗ \vec{a} a 和 b ⃗ \vec{b} b 可以通过几何法相加,即将它们按照共同的比例绘制,并首尾相接放置。连接第一个向量的尾部和第二个

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in