A
题意:给你两个数组 分别为A,B
现在组合成为一个C数组,ci的值为Ai*Bj的最大值其中0<i<=j<=n
解析:预处理出每个j对应的最大A[i],并且保存C[i-1]的值,
c[i]的值等于c[i-1],b[i]*sum[i];
AC代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
const int N=2e5+10;
ll a[N];
ll b[N];
ll max1[N];
int main()
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>a[i];
if(max1[i-1]>a[i])
{
max1[i]=max1[i-1];
}
else
{
max1[i]=a[i];
}
}
for(int i=1; i<=n; i++)
{
cin>>b[i];
}
ll ans=0;
for(int i=1; i<=n; i++)
{
ll k=max(ans,b[i]*max1[i]);
ans=k;
cout<<k<<endl;
}
return 0;
}
B
题意:有N个数字,K个盒子,每个盒子中不存在的最小的非负数即为次盒子的值,求所以盒子的最大值
解析:用桶存储数字的个数,从前往后进行枚举,并且进行相加。具体实现请看代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
const int N=4e5+10;
int a[N];
int main()
{
int n,k;
cin>>n>>k;
for(int i=0; i<n; i++)
{
int q;
cin>>q;
a[q]++;
}
int sum=0;
for(int i=0; i<n; i++)
{
if(a[i])
{
if(a[i]<k)
{
sum+=i*(k-a[i]);
k=a[i];
}
}
else
{
sum+=i*(k-a[i]);
k=a[i];
break;
}
}
cout<<sum<<endl;
return 0;
}
C
题意 一个H*W的矩阵中有K个格子上写了字母R,D,X
R只能移动至(i,j+1)的格子中,D只能移动至(i+1,j)的格子中,x则都可以
空白格子可以写任意的一个字母,问到(H,W)有多少种路径。
解析:偷个懒,下次写~~~
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=998244353;
const int N=5010;
char mp[N][N];
ll dp[N][N];
long long int pows(long long int a, long long int k)
{
long long int ans = 1;
a %= mod;
while(k)
{
if(k % 2)
ans *= a;
a = (a * a) % mod;
k /= 2;
ans %= mod;
}
return ans;
}
int main()
{
ll h,w,k;
cin>>h>>w>>k;
ll t=k;
while(t--)
{
int x,y;
char c;
cin>>x>>y>>c;
mp[x][y]=c;
}
ll ans=pows(3,h*w-k);
dp[1][1]=ans;
ans=pows(3,mod-2);
for(int i=1; i<=h; i++)
{
for(int j=1; j<=w; j++)
{
if(mp[i][j]=='R')
{
dp[i][j+1]=(dp[i][j+1]+dp[i][j])%mod;
}
else if(mp[i][j]=='D')
{
dp[i+1][j]=(dp[i+1][j]+dp[i][j])%mod;
}
else if(mp[i][j]=='X')
{
dp[i][j+1]=(dp[i][j+1]+dp[i][j])%mod;
dp[i+1][j]=(dp[i+1][j]+dp[i][j])%mod;
}
else
{
dp[i][j+1]=(dp[i][j+1]+dp[i][j]*ans%mod)%mod;
dp[i][j+1]=(dp[i][j+1]+dp[i][j]*ans%mod)%mod;
dp[i+1][j]=(dp[i+1][j]+dp[i][j]*ans%mod)%mod;
dp[i+1][j]=(dp[i+1][j]+dp[i][j]*ans%mod)%mod;
}
}
}
cout<<dp[h][w]<<endl;
return 0;
}