题目:
这是我的TLE84分代码:
#include<cstdio>
#define N 3001
#ifdef ONLINE_JUDGE
#define getchar getchar_unlocked
#else
#define getchar _getchar_nolock
#endif
int n,x[N],y[N],sy[N],ssy[N],d[N][N];
long long ans;
bool flag1=false,flag2=false;
inline int read()
{
int x=0,f=1;
char c=getchar();
for(;c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
for(;c>='0'&&c<='9';c=getchar()) x=(x<<3)+(x<<1)+c-48;
return x*f;
}
inline int abs(const int &x)
{
return x>=0?x:-x;
}
inline void solveBF_()
{
for(int i=1;i<n-1;++i)
for(int j=i+1;j<n;++j)
for(int k=j+1;k<=n;++k){
//x[i]*y[j]-x[j]*y[i]+x[j]*y[k]-x[k]*y[j]+x[k]*y[i]-x[i]*y[k];
int r=0;
r+=x[i]*y[j]-x[j]*y[i];
r+=x[j]*y[k]-x[k]*y[j];
r+=x[k]*y[i]-x[i]*y[k];
ans+=abs(r);
}
printf("%.1lf",ans/2.0);
}
inline void solveBF__()
{
for(int i=1;i<n-1;++i)
for(int j=i+1;j<n;++j)
for(int k=j+1;k<=n;++k){
//x[i]*y[j]-x[j]*y[i]+x[j]*y[k]-x[k]*y[j]+x[k]*y[i]-x[i]*y[k];
int r=x[i]*(y[j]-y[k])+x[j]*(y[k]-y[i])+x[k]*(y[i]-y[j]);
ans+=abs(r);
}
printf("%.1lf",ans/2.0);
}
inline void solveBF___()
{
for(int i=1;i<n-1;++i){
int xi=0;
for(int j=i+1;j<n;++j) xi+=y[j]*(n-j)-sy[j+1];
ans+=x[i]*xi;
}
for(int j=2;j<n;++j){
int xj=0;
for(int i=1;i<j;++i) xj-=y[i];
for(int k=j+1;k<=n;++k) xj+=y[k];
ans+=x[j]*xj;
}
for(int k=3;k<=n;++k){
int xk=0;
for(int j=2;j<k;++j) xk+=ssy[j-1]-y[j]*(j-1);
ans+=x[k]*xk;
}
printf("%.1lf",abs(ans)/2.0);
}
inline void solveBF()
{
for(int i=1;i<n-1;++i)
for(int j=i+1;j<n;++j){
int dij=d[i][j];
for(int k=j+1;k<=n;++k) ans+=abs(dij+d[j][k]+d[k][i]);
}
printf("%.1lf",ans/2.0);
}
signed main()
{
n=read();
for(int i=1;i<=n;++i){
x[i]=read();
y[i]=read();
}
for(int i=n;i>=1;--i) sy[i]=sy[i+1]+y[i];
for(int i=1;i<=n;++i) ssy[i]=ssy[i-1]+y[i];
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j) d[i][j]=x[i]*y[j]-x[j]*y[i];
if(n<=2000) solveBF();
else solveBF__();
return 0;
}
求大佬们告诉我,代码效率怎么优化?

