2025/03/31打卡
问题1 小球反弹
问题描述
有一长方形,长为 343720343720 单位长度,宽为 233333233333 单位长度。在其内部左上角顶点有一小球 (无视其体积),其初速度如图所示且保持运动速率不变,分解到长宽两个方向上的速率之比为 dx:dy=15:17d**x:d**y=15:17。小球碰到长方形的边框时会发生反弹,每次反弹的入射角与反射角相等,因此小球会改变方向且保持速率不变(如果小球刚好射向角落,则按入射方向原路返回)。从小球出发到其第一次回到左上角顶点这段时间里,小球运动的路程为多少单位长度?答案四舍五入保留两位小数。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个小数,在提交答案时只填写这个小数,填写多余的内容将无法得分。
解答1
这里解答的思路有点新颖,首先我们注意到速度是不变的,所以只是方向改变打的话,我们的思路其实可以转化为击中角落其实就是走了长和宽的奇数偶数倍,其实取模为0,如果长宽取模都为0,则说明其位置已经在角落了,那么我们知道单位是单位长度(抽象),则其路程不就为速度乘以时间,我们知道了其速率之比(我们设vx=15,vy=17,小k约掉,由单位长度其实我们知道v可以看成1),则只需要判断一下他的宽高路程取模后为0即可,最后勾股定理算出路程,最后原路返回记得乘2
#include <bits/stdc++.h> using namespace std; int main() { long long length=343720,width=233333; long long t=1;//第几次碰撞也就是第几秒 while(1){ if(15*t%length==0&&17*t%width==0){ break; } t++; } //因为速度不变,每次向上下和向左右的速度不变,所以其实知道时间就可以算出路程 printf("%.2f",2*sqrt(15*15*t*t+17*17*t*t)); return 0; }
问题2 区间和
P8218 【深进1.例1】求区间和
题目描述
给定 $n$ 个正整数组成的数列 $a_1, a_2, \cdots, a_n$ 和 $m$ 个区间 $[l_i,r_i]$,分别求这 $m$ 个区间的区间和。
对于所有测试数据,$n,m\le10^5,a_i\le 10^4$
输入格式
第一行,为一个正整数 $n$ 。
第二行,为 $n$ 个正整数 $a_1,a_2, \cdots ,a_n$
第三行,为一个正整数 $m$ 。
接下来 $m$ 行,每行为两个正整数 $l_i,r_i$ ,满足$1\le l_i\le r_i\le n$
输出格式
共 $m$ 行。
第 $i$ 行为第 $i$ 组答案的询问。
输入输出样例 #1
输入 #1
4 4 3 2 1 2 1 4 2 3
输出 #1
10 5
说明/提示
样例解释:第 $1$ 到第 $4$ 个数加起来和为 $10$。第 $2$ 个数到第 $3$ 个数加起来和为 $5$。
对于 $50 \%$ 的数据:$n,m\le 1000$;
对于 $100 \%$ 的数据:$1 \le n, m\le 10^5$,$1 \le a_i\le 10^4$
解答2
套前缀和模版,用一个数组去记录部分的和
//区间和 //相加注意ll,记得考虑数组大小 #include<bits/stdc++.h> using namespace std; const int N=100010; #define ll long long ll a[N],sum[N]; int main(){ ll num,cnt,q1,q2,ans; cin>>num; cin>>a[0]; sum[0]=a[0]; for(int i=1;i<num;i++){ cin>>a[i]; sum[i]=sum[i-1]+a[i]; } cin>>cnt; for(int i=0;i<cnt;i++){ cin>>q1>>q2; ans=sum[--q2]-sum[--q1-1]; cout<<ans<<endl; } return 0; }
问题3 to_string函数
解答3
//过7 #include <iostream> using namespace std; int main() { int a,ans=0; string s; cin>>a; for(int i=1;i<=a;i++){ if(i%7==0) ans++; else{ s=to_string(i); if(s.find('7')!=string::npos) ans++; } } cout<<ans; }
问题4 怎么忽略掉无效输出
解答4
//不要三句号的歪 #include<bits/stdc++.h> using namespace std; int main(){ char c; int a,b,d; cin>>a>>c>>b>>c>>c>>c>>c>>c>>d; cout<<d-3-a+1; return 0; }
问题5 总结规律题
解答5
//变形的杨辉三角 #include<bits/stdc++.h> using namespace std; #define ll long long int main(){ int num; cin>>num; if(num==1||num==2) cout<<-1; else if(num%4==0) cout<<3; else if(num%2!=0) cout<<2; else cout<<4; return 0; }