2021NOI online 入门组总结

1.切蛋糕
若a,b,c都不为零,则最多切3刀,最少当c=(a+b+c)/2时,切二刀。if() …else…

#include
#define LL long long
using namespace std;
int a,b,c,T;
int main()
{
     
	freopen("cake.in","r",stdin);
	freopen("cake.out","w",stdout);
	scanf("%d",&T);
	while(T--)
	{
     
		int sum=0,p[5];
		scanf("%d%d%d",&p[1],&p[2],&p[3]);
		sort(p+1,p+4);
		a=p[1];b=p[2];c=p[3];
		sum=a+b+c;
		if(a==0&&b==0) printf("0\n");
		else if(a==0&&b==c) printf("1\n");
		else if(a==0) printf("2\n");
		else if(c==sum/2) printf("2\n");
		else if(a==b&&b!=c) printf("2\n");
		else printf("3\n");  
	}
	return 0;
}

2.吃豆人
暴力写了30分(大概),想了想,当n为奇数时,斜边不可能有重复,应该可以实现。

#include
#define LL long long
using namespace std;
int n,a[1086][1086],b[100086],ii[1086],jj[1086],m=5;
int main()
{
     
	freopen("pacman.in","r",stdin);
	freopen("pacman.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
     
		for(int j=1;j<=n;j++)
		{
     
			
			cin>>a[i][j];
			ii[j]+=a[i][j];
			jj[i]+=a[i][j];
		}
	}
	if(n==2) 
	{
     
		cout<<a[1][1]+a[1][2]+a[2][1]+a[2][2]<<endl;
		return 0;
	}
	b[1]=a[2][1]+a[3][2]+a[1][2]+a[2][3]+a[1][1]+a[3][3];
	b[2]=a[2][1]+a[3][2]+a[1][2]+a[2][3]+a[1][3]+a[3][1];
	cout<<max(b[1],b[2])<<endl;
	return 0;
}

3.
当n,m<=2时,特判是否两球相同,是否可以相遇,相遇的话最多2步,最少1步(不重复),20分…

#include
#define LL long long
using namespace std;
int n,m,p;
int MAP[300][300];
int main()
{
     
	freopen("ball.in","r",stdin);
	freopen("ball.out","w",stdout);
	scanf("%d%d%d",&n,&m,&p);
	while(m--)
	{
     
		int x,y;
		scanf("%d%d",&x,&y);
		MAP[x][y]=1;
	}
	while(p--)
	{
     
		int a,b,c,d;
		scanf("%d%d%d%d",&a,&b,&c,&d);
		if(a==c&&b==d) 
		{
     
			printf("0\n");
		}
		else if(a==c||b==d)
		{
     
			printf("1\n");
		}
		else if((MAP[1][2]==1&&MAP[2][1]==1)||(MAP[1][1]==1&&MAP[2][2]==1))
		{
     
			printf("-1\n");
		 } 
		 else printf("2\n");
	}
	return 0;
}

你可能感兴趣的:(2021NOI online 入门组总结)