只会做三个题;

A:简单题,不解释:

 #include<cstdio>
using namespace std; int k,d; int main()
{
scanf("%d%d",&k,&d);
if(d==)
{
if(k>)puts("No solution");
else puts("");
}
else
{
if(k>=d)
{
for(int i=; i<d; i++)
printf("");
for(int i=; i<k-d; i++)
printf("");
}
else
{
printf("%d",d);
for(int i=; i<k; i++)
printf("");
}
}
return ;
}

B题:从第一种票的往第四种票用贪心扫一遍;

 #include<cstdio>
#define maxn 1005
using namespace std; int n,m,c[],bus[maxn],trai[maxn],buspen[maxn];
int tailpen[maxn],sum1,sum2,ans; int main()
{
for(int i=; i<; i++)scanf("%d",&c[i]);
scanf("%d%d",&n,&m);
for(int i=; i<n; i++)
{
scanf("%d",&bus[i]);
if(bus[i]*c[]>c[])buspen[i]=c[];
else buspen[i]=bus[i]*c[];
}
for(int i=; i<m; i++)
{
scanf("%d",&trai[i]);
if(trai[i]*c[]>c[])tailpen[i]=c[];
else tailpen[i]=trai[i]*c[];
}
for(int i=;i<n;i++)sum1+=buspen[i];
for(int i=;i<m;i++)sum2+=tailpen[i];
if(sum1<c[])ans+=sum1;
else ans+=c[];
if(sum2<c[])ans+=sum2;
else ans+=c[];
if(ans<c[])printf("%d",ans);
else printf("%d",c[]);
}

C:

n件物品n+1个空,枚举他们最后相遇的那个空,然后贪心就可!

代码:

 #include<cstdio>
#include<iostream>
#define maxn 100005
using namespace std; int n,l,r,ql,qr,v;
long long goods[maxn],s[maxn],ans;
int main()
{
scanf("%d%d%d%d%d",&n,&l,&r,&ql,&qr);
for(int i=; i<=n; i++)
{
scanf("%d",&goods[i]);
s[i]=s[i-]+goods[i];
}
long long minn=;
for(int i=;i<=n;i++)
{
v=n-i;
ans=s[i]*l+(s[n]-s[i])*r;
if (i>v+) ans+=(i-v-)*ql;
if (v>i+) ans+=(v-i-)*qr;
if (ans<minn) minn=ans;
}
cout<<minn;
}
05-04 01:10