哪位大佬能帮忙看看啊?已经卡了一个多月了/kk
#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f
#define lowbit(x) x & -x
#define re register
using namespace std;
ll read()//快读
{
ll w=0;
char c=getchar();
while (c<'0'||c>'9')//不读负号
c=getchar();
while (c>='0'&&c<='9')
{
w=(w<<3)+(w<<1)+c-'0';
c=getchar();
}
return w;
}
void print(unsigned ll p)//快输
{
if (p>9)
print(p/10);
putchar(p%10+'0');
return ;
}
void Print(unsigned ll p,char c)
{
print(p);
putchar(c);
return ;
}
int n;
unsigned ll ans;
ll maxx,maxy;
int i,j,k;
struct node
{
ll x;
ll y;
bool f;
}a[5003];//坐标点
ll max(ll a,ll b)
{
return a>b?a:b;
}
bool cmp(node x,node y)
{
return x.x+x.y<y.x+y.y;//便于后面比较
}
int main()
{
n=read();
for (i=1;i<=n;i++)
{
a[i].x=read();
a[i].y=read();
a[i].f=1;//初始化
}
sort(a+1,a+n+1,cmp);//排序
for (i=1;i<n;i++)
for (j=i+1;j<=n;j++)
if (a[i].x<=a[j].x&&a[i].y<=a[j].y)//如果横纵坐标都更大
a[i].f=0;//标记
for (i=1;i<=n;i++)
{
if (!a[i].f)//如果a[i]已经被标记
continue;//跳过
for (j=1;j<=n;j++)
{
if (!a[j].f||j==i)//如果a[j]已经被标记或是重合
continue;//跳过
maxx=max(a[i].x,a[j].x);//计算二者坐标最大值
maxy=max(a[i].y,a[j].y);
if ((maxx*maxy)<=(a[i].x*a[i].y+a[j].x*a[j].y))//如果两个合并能够优化答案
{
a[i].x=maxx;//坐标变为最大值
a[i].y=maxy;
a[j].f=0;//另一个进行标记
}
}
}
for (i=1;i<=n;i++)//从头到尾进行扫描
if (a[i].f)//如果没有被标记
ans+=a[i].x*a[i].y;//算面积
cout <<(ans*4)<<endl;/*最后乘四
for (i=1;i<=n;i++)//检测
{
Print(a[i].f,' ');
Print(a[i].x,' ');
Print(a[i].y,'\n');
}*/
return 0;
}
对拍也跑了好几趟了,没啥问题,可一到洛谷上就不行,这是怎么回事呢?哪位好心的大佬能指点下萌新QAQ,感激不尽