A. Stock Arbitraging
签到题,买股票,就是买的价格分别为si,卖的价格分别为bi,用最少的钱买进,用最大的价格卖出,还有别忘记加上买股票是剩下的钱。
# include <bits/stdc++.h>
using namespace std;typedef long long LL;
LL s[40];
LL b[40];
bool cmp(LL a,LL b)
{return a>b;
}
int main()
{LL n,m,r;LL aa,bb;scanf("%lld %lld %lld",&n,&m,&r);for(int i=0;i<n;i++){scanf("%lld",&s[i]);} for(int i=0;i<m;i++){scanf("%lld",&b[i]);}sort(s,s+n);sort(b,b+m,cmp);//cout<<s[0]<<" "<<b[0]<<endl;aa=r/s[0];bb=b[0]*aa+r%s[0];printf("%lld",max(bb,r)); return 0;}
B. Tiling Challenge
就是暴力判断是否是可以用哪个图形填满。同时不要忘记边界的判断。
# include <bits/stdc++.h>
using namespace std;char mb[60][60];
int flag=1;
int n;
int x[]={0,1,1,1,2};
int y[]={0,-1,0,1,0};
int main()
{ scanf("%d",&n);getchar();for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%c",&mb[i][j]); }getchar();}int nn=0;while(nn<n*n){int xx=nn/n;int yy=nn%n;if(nn>=n*n){break;}int flag1=1;if(mb[xx][yy]=='.'){for(int i=0;i<5;i++){//cout<<xx+x[i]<<" "<<yy+y[i]<<endl;if(((xx+x[i])>=0&&xx+x[i]<n)&&((yy+y[i])>=0&&(yy+y[i])<n)){if(mb[xx+x[i]][yy+y[i]]=='.'){continue;}else{flag=0;flag1=0;break;}}else{flag=0;flag1=0;break;}}if(flag1){for(int i=0;i<5;i++){mb[xx+x[i]][yy+y[i]]='#';}nn++;}else{break;}}else{nn++;}}if(flag){printf("YES");}else{printf("NO");}return 0;
}
C. Prefix Sum Primes
就是尽可能的让数字之和组成素数,由打表可得,素数差的规律(一下是从2开始的两个素数之差),可以看出素数之差大部分是偶数,而素数大部分是奇数,所以所给的1的个数很重要,根据1和2的个数判断
# include <bits/stdc++.h>
using namespace std;const int MAXN=2e5+20;
int a[MAXN];
int main()
{int n;int flag=0;int ysum=0,esum=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);if(a[i]==1){ysum++;}else{esum++;}}if(ysum==0){for(int i=0;i<n;i++){printf("%d ",a[i]);}}else if(ysum==1){if(esum>0){printf("2 ");esum--;}printf("1 ");for(int i=0;i<esum;i++){printf("2 ");} }else if(ysum==2){if(esum>0){printf("2 ");esum--;}printf("1 ");for(int i=0;i<esum;i++){printf("2 ");}printf("1");}else if(ysum>=3){printf("1 1 1 ");ysum-=3;for(int i=0;i<esum;i++){printf("2 ");}for(int i=0;i<ysum;i++){printf("1 ");}}return 0;
}