AcWing第35场周赛题解
第35场周赛活动链接
problem.A AcWing4212 字符串比较
先遍历将字母大小写统一后,直接利用string的不等运算符得出结果。
代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
for(int i=0;i<a.size();i++)
if(a[i]>='A'&&a[i]<='Z') a[i]+=32;
for(int i=0;i<b.size();i++)
if(b[i]>='A'&&b[i]<='Z') b[i]+=32;
if(a>b) cout<<"1";
else if(a==b) cout<<"0";
else cout<<"-1";
return 0;
}
problem.B AcWing4213 最小结果
遍历所有可能的运算顺序
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long LL;
LL res=1e18;
char op[5];
void dfs(vector<LL> vec,int u)
{
if(vec.size()==1) res=min(res,vec[0]);
else
{
for(int i=0;i<vec.size();i++)
for(int j=i+1;j<vec.size();j++)
{
vector<LL> t;
for(int k=0;k<vec.size();k++)
if(k!=i&&k!=j) t.push_back(vec[k]);
if(op[u]=='*') t.push_back(vec[i]*vec[j]);
else t.push_back(vec[i]+vec[j]);
dfs(t,u+1);
}
}
}
int main()
{
vector<LL> vec(4);
for(int i=0;i<4;i++ ) cin>>vec[i];
for(int i=0;i<3;i++) cin>>op[i];
dfs(vec,0);
cout<<res<<endl;
return 0;
}
problem.C AcWing4214 三元组
1.遍历i然后遍历j再遍历k是O(n^3),会超时。
2.要求i<j<k,可行思路是O(n)遍历j,然后分开从j左右以O(n)找\(s[i]\)满足条件的最小的\(c[i]\)与\(c[k]\),然后与\(c[k]\)求和后重复此操作取min。这样时间复杂度是O(n^2)
代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 3010;
const int INF = 0x3f3f3f3f;
int s[N],c[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>s[i];
for(int i=1;i<=n;i++) cin>>c[i];
int res=INF;
for(int i=2;i<n;i++)
{
int a=INF,b=INF;
for(int j=1;j<i;j++)
if(s[j]<s[i]) a=min(a,c[j]);
for(int j=i+1;j<=n;j++)
if(s[j]>s[i]) b=min(b,c[j]);
res=min(res,a+c[i]+b);
}
if(res==INF) cout<<"-1";
else cout<<res;
return 0;
}

浙公网安备 33010602011771号