平面分割
代码一行,解析一箱~~
解析
计f[i]:从1到i累加之和
先假设最好情况,p=2;
此时第一条会增加1个
第二条与第一条相交,再加2个
第三条与前2条相交,再加3个
…
故n条时共增加f[n]个,共f[n]+1个
而p>=3时
第三条本应与前两条分别相交,而只交了一个,少交了一个
第4条本应与前3条分别相交,而只交了一个,少交了2个
…
故p条相交,共少交f[p-2]个
则最终答案为f[n]+1-f[p-2]
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<climits>
using namespace std;
const int M=INT_MAX;
long long f[550]={ };
void solve(int n){
for(int i=1;i<=n;i++){
f[i] = f[i-1] + i;
}
return;
}
int main(){
int n,p;
scanf("%d%d",&n,&p);
solve(n);
printf("%lld",f[n]-f[p-2]+1);
return 0;
}