求调刚刚比赛T2
  • 板块学术版
  • 楼主gongziwen
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/5 13:41
  • 上次更新2023/11/3 05:46:22
查看原帖
求调刚刚比赛T2
418739
gongziwen楼主2023/8/5 13:41

0pts

#include<cstdio>
#include<algorithm>
#include<cmath>
long long ans,n,m,a[2006][2006],chfen[2006][2006];
struct array{
	long double a[2006];
	friend bool operator <(array x,array y)
	{
		for(int i=1;i<=2000;i++)
			if(fabs(x.a[i]-y.a[i])>1e-7) return x.a[i]<y.a[i]+1e-7;
	}
	friend bool operator ==(array x,array y)
	{
		for(int i=1;i<=2000;i++)
			if(fabs(x.a[i]-y.a[i])>1e-7) return 0;
		return 1;
	}
}diver[2006];
int rounder(long double x)
{
	return int(x+0.5);
}
bool nointeger(array x)
{
	for(int i=1;i<=2000;i++)
		if(fabs(x.a[i]-rounder(x.a[i]))>1e-7) return 1;
	return 0;
}
void read(long long &x)
{
	char c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
}
void print(long long x)
{
	if(x==0) putchar('0');
	int stk[20],top=0;
	while(x) stk[++top]=x%10,x/=10;
	for(int i=top;i>=1;i--) putchar(stk[i]+'0');
}
int main()
{
	read(m),read(n);
	if(n<=2) print(m*(m+1)/2);
	else
	{
		for(int i=1;i<=m;i++)
			for(int j=1;j<=n;j++)
			{
				read(a[i][j]);
				if(j>=2) chfen[i][j-1]=a[i][j-1]-a[i][j];
				if(j>=3) diver[i].a[j-2]=chfen[i][j-1]/(chfen[i][j-2]*1.0L);
			}
		int top=m;
		for(int i=1;i<=m;i++)
			if(nointeger(diver[i])) std::swap(diver[i],diver[top]),top--;
		std::sort(diver+1,diver+top+1);
		int k=0;
		for(int i=1;i<=top+1;i++)
			if((diver[i]==diver[i-1]||i==1)&&i!=top+1) k++;
			else
			{
				ans+=k*(k-1)/2;
				k=1;
			}
		print(ans);
	}
	return 0;
}
2023/8/5 13:41
加载中...