首页 > 其他分享 >CF1028

CF1028

时间:2024-10-30 11:43:01浏览次数:6  
标签:CF1028 mxx mxy int max char 矩形

我好菜 不——开————心——————
【A. Find Square】
原题小链接:https://codeforces.com/problemset/problem/1028/A
题目大意:给出一个n*m的矩阵,矩阵中有一个由‘B’组成的正方形(边长为奇数),求正方形的中心点在矩阵中的坐标。
解题思路:只要知道正方形四个顶点的坐标,求中心点就很容易了。所以只需要记录一下正方形行和列的范围,输出两者的中点就ok了

代码
#incIude <bits/stdc++.h>
using namespace std;
const int N=120;
int n,m;
int r1=0x3f3f3f3f,r2,l1=0x3f3f3f3f,l2;

int main()
{
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=m;j++)
		{
			char c;
			cin>>c;
			if (c=='B')
			{
				r1=min(i,r1);
				r2=max(i,r2);
				l1=min(l1,j);
				l2=max(l2,j);
			}
		}
	}
	cout<<(r1+r2)/2<<" "<<(l1+l2)/2;
	return 0;
}

【B. Unnatural Conditions】
原题小链接:https://codeforces.com/problemset/problem/1028/B
题目大意:令S(a)表示a数位位上的数字之和,给出n,m,输出a,b,使S(a)>=n,S(b)>=n,S(a+b)<=m
解题思路:因为n,m>=1,我们不妨使得S(a+b)=1,即前面每位的和为9、最后一位和为10,然后使S(a),S(b)>=n便可输出答案

代码
#incIude <bits/stdc++.h>
using namespace std;
int n,m;
string a,b;

int main()
{
	cin>>n>>m;
	while (n>4)
	{
		a+=(char)('0'+4);
		b+=(char)('0'+5);
		n-=4;
	}
	a+=(char)('0'+5);
	b+=(char)('0'+5);
	cout<<a<<endl<<b;
	return 0;
}

【C. Rectangles】
原题小链接:https://codeforces.com/problemset/problem/1028/C
题目大意:在平面直角坐标系中给出n个矩形,需找到一点(x,y)使得该点至少被n-1个矩形包含(内部或边界)
解题思路:一眼想出取所有矩形x、y的交集,但是这个题可能不能取到所有矩形的坐标的交集。于是乎,需要枚举删除第i个矩形。那么每次怎么操作呢……
预处理出最大的x1、y1与最小的x2、y2(取所有矩形的交集),若最值是在此次删除的矩形中取到的,那么这次就要不取最值而是取次大值、次小值(因为最值的矩形被删了……所以只能取次的值……)
*小小声:刚开始把x、y单拎出来算的,就没有考虑到可能x和y删了2个矩形……然后就挂了

不可爱的代码
#include <bits/stdc++.h>
using namespace std;
int inf=2147483647;
int n;
int mxx[4],mnx[4],mxy[4],mny[4];//1最大值,2次大值,3很好理解 

int main()
{
	scanf("%d",&n);
	mxx[1]=mxy[1]=-inf;
	mnx[1]=mny[1]=inf;
	for (int i=1;i<=n;i++)
	{
		int x1,yy1,x2,y2;
		scanf("%d%d%d%d",&x1,&yy1,&x2,&y2);
		if (x1>=mxx[1])
		{
			mxx[2]=mxx[1];
			mxx[1]=x1;
			mxx[3]=i;
		}
		else mxx[2]=max(mxx[2],x1);
		if (x2<=mnx[1])
		{
			mnx[2]=mnx[1];
			mnx[1]=x2;
			mnx[3]=i;
		}
		else mnx[2]=min(mnx[2],x2);
		if (yy1>=mxy[1])
		{
			mxy[2]=mxy[1];
			mxy[1]=yy1;
			mxy[3]=i;
		}
		else mxy[2]=max(mxy[2],yy1);
		if (y2<=mny[1])
		{
			mny[2]=mny[1];
			mny[1]=y2;
			mny[3]=i;
		}
		else mny[2]=min(mny[2],y2);
	}
	for (int i=1;i<=n;i++)//枚举删除的矩形 
	{
		int a,b,c,d;
		if (i==mxx[3]) a=mxx[2];
		else a=mxx[1];
		if (i==mnx[3]) b=mnx[2];
		else b=mnx[1];
		if (i==mxy[3]) c=mxy[2];
		else c=mxy[1];
		if (i==mny[3]) d=mny[2];
		else d=mny[1];
		if (a<=b&&c<=d)
		{
			printf("%d %d",a,c);
			break;
		}
	}
	return 0;
}
我还是太弱了 不——开————心——————

标签:CF1028,mxx,mxy,int,max,char,矩形
From: https://www.cnblogs.com/Myyy-L/p/18515548

相关文章