solution - AT_nikkei2019_2_final_c Largest N
依然是人类智慧复杂度。
Solution
首先考虑
然后考虑剪枝,一个简单的剪枝就是只枚举
发现快到起飞,甚至只跑了 605ms。
Code
int n,m,u[N][N],t[N][N];
bitset <N> a[N];
signed main()
{
read(n,m); {int qwq,x,y; read(qwq); while(qwq--) read(x,y),a[x][y]=1;}
rep(j,1,m) rep(i,1,n) u[i][j]=(a[i][j] ? u[i-1][j]+1 : 0);
rep(id,1,n)
{
t[id][1]=a[id][1];
for(int i=id,j=1;i<=n && j<=m;++i,++j) t[i][j]=(a[i][j] ? t[i-1][j-1]+1 : 0);
}
rep(id,2,m)
{
t[1][id]=a[1][id];
for(int i=1,j=id;i<=n && j<=m;++i,++j) t[i][j]=(a[i][j] ? t[i-1][j-1]+1 : 0);
}
int ans=0;
rpe(i,n,1) rpe(j,m,1) rpe(k,min(u[i][j],t[i][j]),ans+1) if(u[i][j-k+1]>=k)
{
ans=k;
break;
}
write(ans);
return 0;
}
华风夏韵,洛水天依!