Codeforces Round #556 (Div. 2)

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的个数判断
Codeforces Round #556 (Div. 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;
}
上一篇:LeetCode 556. 下一个更大元素 III(Next Greater Element III)


下一篇:快速排序算法总结