观察发现左右只有一次操作,两种情况,1:折纸之后没有超过右边 2:折纸后超过右边 从而修改x的位置来判断是否有双倍;
上下无需考虑,统统都是cnt+1。卒。记得LL
long long computeArea(int width, int height, int xfold, int cnt, int x1, int y1, int x2, int y2) {
long long rst=1LL*width*height;
xfold=(xfold*2<=width?xfold:width-xfold);
//OUT(xfold);
if (x1>=xfold)
{
rst-=(1LL*y2-y1)*(1LL*x2-x1)*(1LL*cnt+1);
// OUT((1LL*y2-y1)*(1LL*x2-x1)*(1LL*cnt+1));
}
else if (x2<=xfold)
{rst-=(1LL*y2-y1)*(1LL*x2-x1)*(1LL*cnt+1)*2;
// OUT((1LL*y2-y1)*(1LL*x2-x1)*(1LL*cnt+1)*2);
}
else
{
rst-=(1LL*y2-y1)*((1LL*x2-xfold)*(1LL*cnt+1)+(1LL*xfold-x1)*(1LL*cnt+1)*2);
//OUT((y2-y1)*(x2-xfold)*(cnt+1)*2);
}
return rst;
}