Acwing第 52 场周赛
4422. 智力测试
原题链接
算法标签 枚举 模拟
代码
#include<bits/stdc++.h>
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
int sum=0;
int t=0;
int flag=false;
for(int i=1;;++i){
sum+=i*(i+1)/2;
// 若相等 则要算上该题
if(sum==n){
t=i;
flag=true;
break;
}
// 若超过 则不算上该题, 输出时减一
else if(sum>n){
t=i;
break;
}
}
if(flag){
cout<<t<<"\n";
}
else{
cout<<t-1<<"\n";
}
}
4423. 最近距离
原题链接
算法标签 枚举 模拟
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 200005;
vector<int> v;
vector<int> v0;
int a[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i];
if(!a[i]){
v0.push_back(i);
}
}
// 数组第一项-数组第一个数值为零项
for(int i=0;i<=v0[0];++i){
cout<<abs(i-v0[0])<<" ";
}
// 数组第一个数值为零项 -数组最后一个数值为零项
for(int i=1;i<v0.size()-1;++i){
for(int j=v0[i];j<=v0[i+1];++j){
cout<<min(abs(v0[i]-j), abs(v0[i+1]-j))<<" ";
}
}
// 数组最后一个数值为零项-数组最后一项
for(int i=v0[v0.size()-1];i<n;++i){
cout<<abs(i-v0[v0.size()-1])<<" ";
}
}
直接暴力枚举会超时WA了两发
#include<bits/stdc++.h>
using namespace std;
const int N = 200005;
vector<int> v;
int a[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
scanf("%lld", &n);
for(int i=0;i<n;++i){
scanf("%lld", &a[i]);
}
for(int i=0;i<n;++i){
int t1=0x3f, t2=0x3f;
for(int j=i;j<n;++j){
if(!a[j]){
t1=abs(j-i);
break;
}
}
for(int j=i-1;j>=0;--j){
if(!a[j]){
t2=abs(j-i);
break;
}
}
v.push_back(min(t1, t2));
}
for(auto vv:v){
cout<<vv<<" ";
}
}
4424. 等式
原题链接
算法标签 数学公式
思路 一元二次方程或韦达定理求解
x
1
+
x
2
=
−
b
/
a
=
d
→
b
=
−
a
∗
d
x1+x2=-b/a=d \rightarrow b=-a*d
x1+x2=−b/a=d→b=−a∗d
x
1
∗
x
2
=
−
c
/
a
=
d
→
c
=
a
∗
d
x1*x2=-c/a=d \rightarrow c=a*d
x1∗x2=−c/a=d→c=a∗d
代入
a
x
2
+
b
x
+
c
=
0
→
x
2
−
d
x
+
d
=
0
ax^2+bx+c=0 \rightarrow x^2-dx+d=0
ax2+bx+c=0→x2−dx+d=0
根的判别式
(
−
d
)
2
−
4
∗
1
∗
d
(-d)^2-4*1*d
(−d)2−4∗1∗d
若
(
−
d
)
2
−
4
∗
1
∗
d
=
0
(-d)^2-4*1*d=0
(−d)2−4∗1∗d=0则
x
1
=
x
2
=
0
x1=x2=0
x1=x2=0
若
(
−
d
)
2
−
4
∗
1
∗
d
<
0
(-d)^2-4*1*d<0
(−d)2−4∗1∗d<0则无根
若
(
−
d
)
2
−
4
∗
1
∗
d
>
0
(-d)^2-4*1*d>0
(−d)2−4∗1∗d>0两根为
(
d
±
s
q
r
t
(
d
∗
d
−
d
∗
4
)
)
/
2
(d \pm sqrt(d * d - d * 4)) / 2
(d±sqrt(d∗d−d∗4))/2
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while (t -- ){
double d;
cin>>d;
if (d == 0) cout<<"Y 0 0"<<"\n";
else if (d < 4) cout<<"N"<<"\n";
else{
double dt = sqrt(d * d - d * 4);
cout<<"Y "<<fixed<<setprecision(10)<<(d - dt) / 2<<" "<<fixed<<setprecision(10)<<(d + dt) / 2<<"\n";
}
}
return 0;
}
战绩
战果
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈