8. 小信的方程式
题目ID:20686必做题100分
时间限制: 1000ms
空间限制: 262144kB
题目描述
小信最近刚学完如何解方程,他找了一些题目跃跃欲试。
有四个正整数x,y,z,kx,y,z,k,小信想要计算当0≤x≤a,0≤y≤b,0≤z≤c,0≤k≤d0≤x≤a,0≤y≤b,0≤z≤c,0≤k≤d时,有多少情况满足:x+y+z=kx+y+z=k。
输入格式
第一行输入四个整数a,b,c,d(0≤a,b,c,d≤106)a,b,c,d(0≤a,b,c,d≤106)。
输出格式
输出一个整数表示所有的情况数。
样例
Input 1
3 3 3 3
Output 1
20
Input 2
300 300 300 300
Output 2
4590551
Input 3
12345 12345 12345 12345
Output 3
313713415596
为什么手动 除以2 也能 AC 6个点
阳间代码:
#include <bits/stdc++.h>
using namespace std;
long long ans[10000005],sum;
int main()
{
long long a,b,c,d;
cin>>a>>b>>c>>d;
for(long long i = 0;i <= a;i++)
{
ans[i]++;
ans[i+b+1]--;
}
for(long long i = 1;i <= a+b;i++)
{
ans[i] += ans[i-1];
}
for(long long i = 0;i <= a+b;i++)
{
ans[i]+=ans[i];
ans[i+c+1]-=ans[i];
}
for(long long i = 1;i <= a+b+c;i++)
{
ans[i] += ans[i-1];
}
for(long long i = 0;i <= d;i++)
{
sum+=ans[i];
}
cout<<sum/2;
return 0;
}
然后死了……