总结 | #寒假第三场#
A. 宙天 (WA了1发)
考点:枚举,模拟
题意:给定一个正整数x,判断是否存在正整数k使得x=k*(k+1)
为什么错?忘记不符合的输出"NO"了。。。。。。
AC代码:
void whale_solve(){
int x;cin>>x;
for(int k=1;k*k<=x;k++){
if(k*(k+1)==x){
cout<<"YES";return;
}
}
cout<<"NO";
}
B. Random (WA了1发)
考点:随机化,概率
题意:给定n个数,找到两个不同位置的数i,j使得gcd(i,j)>1,若无输出-1
保证数组元素在[1,1e9]范围内独立均匀随机生成
为什么错?不知道随机数的真正含义(出现奇数和偶数的概率都是0.5,当n比较大时,想要偶数数量少于2,那么概率将会十分之小以至于可以忽略不计。这意味着n足够大时,一定会有i,j满足条件,且会出现在比较前的位置,这时暴力将会是一个非常直接且可行的方法)
AC代码:
using ll=long long;
void whale_solve(){
int n;cin>>n;
vector<ll>a(n);
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(gcd(a[i],a[j])>1){
cout<<a[i]<<" "<<a[j];
return;
}
}
}
cout<<-1;
}
J. Branch of Faith (WA了1发)
考点:完全二叉树
题意:给定有n个节点的完全二叉树,计算与x号节点深度相同的节点数
为什么错?用pow函数被卡精度了,因为pow的接受量是double,在计算的时候就会漏精度,对过大的整数来说并不适用
AC代码:
using ll=long long;
void whale_solve(){
ll n;cin>>n;
ll m=n;
int q;cin>>q;
int hm=0;
while(n>0){
hm++;
n>>=1;
}
ll ans=0;
while(q--){
ll x;cin>>x;
int cnt=0;
while(x>0){
cnt++;
x>>=1;
}
//此处将pow改为位运算
if(cnt==hm) ans=m-(1LL<<(cnt-1))+1;
else ans=1LL<<(cnt-1);
cout<<ans<<"\n";
}
}
H. Tic Tac DREAMIN’ (WA了INF发)
考点:计算几何
题意:给定两个点,判断是否能在x轴上找一个点使得三个点围成的三角形面积等于2
为什么错?计算过程太复杂(像解高中数学题一样),可能有精度问题。
正确思路:用向量叉乘计算三角形面积-->推出x轴上点的位置。注意当AB平行x轴时需判断什么时候没有该种三角形。其它情况的AB均有合适的三角形(可以画图来理解)
AC代码:
void whale_solve(){
//全都设为双精度浮点数
double xa,ya;cin>>xa>>ya;
double xb,yb;cin>>xb>>yb;
double t=xa*yb-ya*xb;
//判断是否平行
if(yb==ya){
if((fabs(t)-4.0)>=-1e-3&&(fabs(t)-4.0)<=1e-3) cout<<0;
else cout<<"no answer";
}else{
double x=(t-4)/(yb-ya);
cout<<fixed<<setprecision(10)<<x;
}
}
F. Energy Synergy Matrix (unfinished)
考点:博弈,最短路,构造
题意:题目较长,建议回去读题,总之就是找规律吧,列个表格会更容易找出来
为什么错?说起来有点🍬,我忘了题意说小小红总是按最优策略走了
就像这样:当n=9时,我的错误想法如下:
r###P#R##
##R#####P ans=10
实际应该如下:
r###P##R#
##R###### ans=9
AC代码:
void whale_solve(){
ll n;cin>>n;
ll ans=n-1+n/5;
cout<<ans;
}
查看15道真题和解析
