首先通过差分约束系统建图,用Floyed算法求出任意两个砝码差值的上下界。
然后暴力枚举放在右边的砝码C,D,通过与A,B差值的上下界分类讨论统计方案。
时间复杂度$O(N^3)$。
#include#define rep(i) for(i=0;i<=n+1;i++)const int N=55,inf=1000;int n,A,B,i,j,k,C,D,dx[N][N],dn[N][N],c1,c2,c3;char s[N][N];inline void umin(int&a,int b){if(a>b)a=b;}inline void umax(int&a,int b){if(a dx[B][D]||dn[D][A]>dx[B][C])c1++; if((dn[C][A]==dx[C][A]&&dn[B][D]==dx[B][D]&&dn[C][A]==dn[B][D])|| (dn[D][A]==dx[D][A]&&dn[B][C]==dx[B][C]&&dn[D][A]==dn[B][C]))c2++; if(dx[C][A]