(File IO): input:2018.in output:2018.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet
题目描述
输入
输出
样例输入
样例输出
数据范围限制
解题思路
蓦然回首,那年那月那时,那容斥原理似曾相识。
所以。。。。图解走起。。。
我们现在就是要相加所有可能后去重。首先是(2的倍数)(1009的倍数)为x1y2+y1x2,而2018的倍数还要加一个去重,为z1(d-c+1-x2-y2+z2)+z2*(b-a+1-x1-y1).
代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
freopen("2018.in","r",stdin);
freopen("2018.out","w",stdout);
long long a,b,c,d;
long long x1,y1,z1,x2,y2,z2,bsy;//我的变量我做主
scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
x1=(b/2)-(a-1)/2;
y1=(b/1009)-(a-1)/1009;
z1=(b/2018)-(a-1)/2018;
x2=(d/2)-(c-1)/2;
y2=(d/1009)-(c-1)/1009;
z2=(d/2018)-(c-1)/2018;
bsy=x1*y2+x2*y1+z1*(d-c+1-x2-y2+z2)+z2*(b-a+1-x1-y1);//本题精华
cout<<bsy;
}