A
题意:给你早上买入和晚上卖出股票价格(股票数量无限)以及你所拥有多少钱,问一晚后你最多能够拥有多少钱
#include "bits/stdc++.h"
#define ll long long
using namespace std;
int main()
{
int a[1100],b[1100];
int n,m,r;
cin>>n>>m>>r;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<m;i++)
cin>>b[i];
sort(b,b+m);
if(a[0]>=b[m-1])
{
cout<<r<<endl;
return 0;
}
else
{
cout<<r/a[0]*b[m-1]+r%a[0]<<endl;
return 0;
}
}
B
题意:给你n*n的矩阵 . 为空 为是否用 填充满
#include "bits/stdc++.h"
#define ll long long
using namespace std;
int a[110][110];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
int n;
int bfs(int x,int y)
{
int cnt=0;
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=0&&xx<n&&yy>=0&&yy<n&&a[xx][yy]==1)
{
cnt++;
}
}
if(cnt==4)
{
a[x][y]=0;
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
a[xx][yy]=0;
}
}
return 0;
}
int main()
{
cin>>n;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
char c;
cin>>c;
if(c=='#')
a[i][j]=0;
else
a[i][j]=1;
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]==1)
{
bfs(i,j);
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
//cout<<i<<" "<<j<<endl;
if(a[i][j]==1)
{
cout<<"NO"<<endl;
return 0;
}
}
}
cout<<"YES"<<endl;
return 0;
}
C
题目大意:给你N个数,每个数都是1或者2.现在让你求一个排列,使得这个排列的前缀和数组 拥有最多的素数。
思路:
通过打表不难发现到3以后,就先填2,,不够再填1,这样一定是最优的。
#include "bits/stdc++.h"
#define ll long long
using namespace std;
int main()
{
int n;
cin>>n;
int flag1=0,flag2=0;
int sum=0;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
sum+=x;
if(x==1)
flag1++;
else
flag2++;
}
if(flag1&&flag2)
{
cout<<2<<" "<<1<<" ";
flag1--,flag2--;
for(int i=0;i<flag2;i++)
{
cout<<2<<" ";
}
for(int i=0;i<flag1;i++)
{
cout<<1<<" ";
}
cout<<endl;
return 0;
}
if(flag1)
{
for(int i=0;i<flag1;i++)
{
cout<<1<<" ";
}
cout<<endl;
return 0;
}
if(flag2)
{
for(int i=0;i<flag2;i++)
{
cout<<2<<" ";
}
cout<<endl;
return 0;
}
return 0;
}