Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)

A. Kitchen Utensils

找到k在餐具中的大倍数

#include<bits/stdc++.h>
#include<vector>
using namespace std;
const int maxn=105;
int a[maxn];
int main(){
	int max=0,n,k,x;
	memset(a,0,sizeof(a));
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++){
		scanf("%d",&x);
		a[x]++;
		if(a[x]>max)
		max=a[x];
	}
	int ans=0;
	if(max%k==0){
		for(int i=0;i<maxn;i++)
		if(a[i]==0)
		a[i]=max;
	}
	else {
		max=(max/k+1)*k;
		for(int i=0;i<maxn;i++)
		if(a[i]==0)
		a[i]=max;
		
	}
	for(int i=0;i<maxn;i++)
		ans+=max-a[i];
	printf("%d\n",ans);
}

B. Personalized Cup

#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
char s[maxn];
int main(){
	scanf("%s",s);
	int l=strlen(s);
	int r=l/20;
	if(l%20!=0)r++;
	int c=l/r;
	if(l%r!=0)
	c++;
	int o=0,d=r*c-l;
	printf("%d %d\n",r,c);
	for(int i=0;i<r;i++){
		for(int j=0;j<c-1;j++){
			printf("%c",s[o]);
			o++;
		}
		if(i<d)
		printf("*");
		else {
			printf("%c",s[o]);
			o++;
		}
		printf("\n");
	}
}

C. Playing Piano

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
int n,a[maxn],b[maxn];
int vis[maxn][6];
void dfs(int i,int l){
	if(i>n){
		for(int i=1;i<=n;i++)
		printf("%d ",b[i]);
		exit(0);
	}
	if(vis[i][l])
	return;
	vis[i][l]=1;
	for(int f=1;f<=5;f++){
		if(a[i-1]<a[i]&&l<f){
			b[i]=f;
			dfs(i+1,f);
		}
		if(a[i-1]>a[i]&&l>f){
			b[i]=f;
			dfs(i+1,f);
		}
		if(a[i-1]==a[i]&&f!=l){
			b[i]=f;
			dfs(i+1,f);
		}
	}
	
}
int main(){
	scanf("%d",&n);
	a[0]=maxn;
	for(int i=1;i<=n;i++)
	scanf("%d",&a[i]);
	dfs(1,5);
	printf("-1\n");
} 

D. Barcelonian Distance

#include<bits/stdc++.h>
using namespace std;
int main(){
	double x1,y1,x2,y2,a,b,c;
	double xa[3],ya[3],xb[3],yb[3];
	double ans;
	scanf("%lf%lf%lf",&a,&b,&c);
	scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
	ans=fabs(x1-x2)+fabs(y1-y2);
	xa[1]=x1;
	ya[1]=-(c+a*xa[1])/b;
	ya[2]=y1;
	xa[2]=-(c+b*ya[2])/a;
	xb[1]=x2;
	yb[1]=-(c+a*xb[1])/b;
	yb[2]=y2;
	xb[2]=-(c+b*yb[2])/a;
	for(int i=1;i<=2;i++)
		for(int j=1;j<=2;j++)
		ans=min(ans,(fabs(x1-xa[i])+fabs(x2-xb[j])+fabs(y1-ya[i])+fabs(y2-yb[j])+hypot(xa[i]-xb[j],ya[i]-yb[j])));
	
	printf("%.10lf\n",ans);
}

http://codeforces.com/contest/1078/problem/B

#include<bits/stdc++.h>
using namespace std;
const int N=105;
int n,ans,cnt[N],f[N][N*N],g[N][N*N];
set<int>s;
int main()
{
	scanf("%d",&n);f[0][0]=1;
	for(int i=0,x;i<n;i++)
	{
	    scanf("%d",&x);s.insert(x);cnt[x]++;
	    for(int j=i;j>=0;j--)for(int k=0;k<N*N;k++)if(f[j][k])
	    {
	        f[j+1][k+x]=1;
	        if((k+x)%(j+1)==0&&x*j!=k)g[j+1][k+x]=1;
	    }
	}
	if(s.size()<=2){printf("%d\n",n);return 0;}
	for(int i=1;i<=100;i++)for(int j=1;j<=cnt[i]&&!g[j][i*j];j++)ans=max(ans,j);
	printf("%d\n",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bailichuan266/article/details/84348378
今日推荐