洛谷 P2735 电网
https://www.luogu.org/problemnew/show/P2735
定理什么的最讨厌了,匹克定理?不会,也不想学。
粉色的为电网,将图中的电网我们将他构造一个矩形,然后蓝色和绿色的的补齐。
那么我们的答案就是:矩阵中的点数- 蓝色三角形中的点数- 绿色三角形中的点数。
然后我们单独拿出一个三角形来考虑。
从箭头开始向左考虑,
我们将这个三角形一点一点的扩大,看每次能覆盖几个点。
随着h不断变大那么,不断有点被覆盖,那么不断加入的点的个数就是$$ \lfloor \frac{b}{a} \times x \rfloor +1 $$。
我们对每个三角形进行处理,然而不要忘记电网的下边缘哦。
最后你会发现有几个点重复处理了(电网下边缘的端点),所以再+2就好了。
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using namespace std; #define LL unsigned long long #define inf 2147483647 LL n,m,p,ans; LL calc(double a,double b) { if(a==0)return b+1; if(b==0)return a+1; LL sum=0; double h=b/a; for(LL i=0;i<=a;i++) { sum+=(LL)(h*double(i)+1); } return sum; } int main() { cin>>n>>m>>p; ans=(max(n,p)+1)*(m+1); // cout<<ans<<"\n"; // cout<<calc(n,m)<<" "<<calc(max(n,p)-min(n,p),m); ans-=calc(n,m); ans-=calc(max(n,p)-min(n,p),m); ans-=p; cout<<ans+2; }
除特别注明外,本站所有文章均为Manjusaka丶梦寒原创,转载请注明来自出处