A. Alyona and copybooks
水题,让求满足条件的最小花费,注意组合可能是多个即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(int argc, char const *argv[])
{
ll n,a,b,c;
cin>>n>>a>>b>>c;
n%=4;
ll ans;
if (n==0) ans=0;
else if (n==1){
ans=c;
ans=min(ans,3*a);
ans=min(ans,a+b);
}else if (n==2){
ans=b;
ans=min(ans,2*c);
ans=min(ans,2*a);
}else {
ans=a;
ans=min(ans,3*c);
ans=min(ans,c+b);
}
cout<<ans<<endl;
return 0;
}
B. Alyona and flowers
也是水题,只要该区间的贡献小于0就略过去。
#include <bits/stdc++.h>
using namespace std;
int v[105];
typedef long long ll;
int main(int argc, char const *argv[])
{
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++) cin>>v[i];
ll ans=0;
for (int i=0;i<m;i++){
int l,r;
cin>>l>>r;
int tt=0;
for (int j=l;j<=r;j++) tt+=v[j];
if (tt>0) ans+=tt;
}
cout<<ans<<endl;
return 0;
}
C. Alyona and mex
给定一些区间,求这些区间的最小mex值最大为多少。
很明显,最小区间长度+1即为结果,然后直接构造就行,
当时敲到最后输出的时候,电脑没电了,很遗憾。
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int l[N],r[N];
int v[N];
int main(int argc, char const *argv[])
{
int n,m;
cin>>n>>m;
int p=n+1,q=0;
for (int i=0;i<m;i++){
cin>>l[i]>>r[i];
if (r[i]-l[i]+1<p){
p=r[i]-l[i]+1;
q=i;
}
}
cout<<p<<endl;
int ll=0;
for (int i=0;i<n;i++) {
cout<<ll++<<" ";
if (ll==p) ll=0;
}
return 0;
}