HAOI2011 problem b

其实就是容斥原理了

代码:

 1 uses math;
 2 const maxn=55000;
 3 var i,n,a,b,c,d,w,tot:longint;
 4     ans:int64;
 5     sum,mu,p:array[0..maxn] of int64;
 6 procedure get;
 7  var i,j,k:longint;
 8      check:array[0..maxn] of boolean;
 9  begin
10  fillchar(check,sizeof(check),false);
11  tot:=0;mu[1]:=1;
12  for i:=2 to maxn do
13   begin
14    if not(check[i]) then begin inc(tot);p[tot]:=i;mu[i]:=-1;end;
15    for j:=1 to tot do
16     begin
17      k:=i*p[j];
18      if k>maxn then break;
19      check[k]:=true;
20      if i mod p[j]<>0 then mu[k]:=-mu[i]
21      else begin mu[k]:=0;break;end;
22     end;
23    end;
24  for i:=1 to maxn do sum[i]:=sum[i-1]+mu[i];
25  end;
26 function f(x,y:longint):int64;
27  var i,last,t:longint;
28  begin
29  x:=x div w;y:=y div w;
30  f:=0;
31  if x>y then begin t:=x;x:=y;y:=t;end;
32  i:=1;
33  while i<=x do
34   begin
35    last:=min(x div (x div i),y div (y div i));
36    inc(f,(sum[last]-sum[i-1])*(x div i)*(y div i));
37    i:=last+1;
38   end;
39  exit(f);
40  end;
41 procedure main;
42  begin
43  get;
44  readln(n);
45  for i:=1 to n do
46   begin
47    readln(a,b,c,d,w);
48    ans:=0;
49    inc(ans,f(b,d));
50    dec(ans,f(a-1,d));
51    dec(ans,f(b,c-1));
52    inc(ans,f(a-1,c-1));
53    writeln(ans);
54   end;
55  end;
56 begin
57  main;
58 end.
59         

不知道为什么上面的数组都要开int64才能过,我觉得不需要啊,他们存储的值都在50000以内啊……????

HAOI2011 problem b,布布扣,bubuko.com

时间: 2024-11-01 07:43:03

HAOI2011 problem b的相关文章

BZOJ 2302: [HAOI2011]Problem c( dp )

dp(i, j)表示从i~N中为j个人选定的方案数, 状态转移就考虑选多少人为i编号, 然后从i+1的方案数算过来就可以了. 时间复杂度O(TN^2) --------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long lo

[BZOJ 2301] [HAOI2011] Problem b

2301: [HAOI2011]Problem b Time Limit: 50 SecMemory Limit: 256 MB Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数n,接下来n行每行五个整数,分别表示a.b.c.d.k Output 共n行,每行一个整数表示满足要求的数对(x,y)的个数 Sample Input 2 2 5 1 5

BZOJ 2301([HAOI2011]Problem b-mobius反演)

2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 2170  Solved: 934 [Submit][Status][Discuss] Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数n,接下来n行每行五个整数,分别表示a.b.c.d.k Out

BZOJ 2301 [HAOI2011]Problem b (容斥+莫比乌斯反演+分块优化 详解)

2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MB Submit: 2096  Solved: 909 [Submit][Status][Discuss] Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数n,接下来n行每行五个整数,分别表示a.b.c.d.k Out

BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]

2302: [HAOI2011]Problem c Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 648  Solved: 355[Submit][Status][Discuss] Description 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1,ai+1也被占据了的话就尝试ai+2,……,如果一直

2301: [HAOI2011]Problem b

2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1737  Solved: 749[Submit][Status][Discuss] Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数n,接下来n行每行五个整数,分别表示a.b.c.d.k Outpu

【BZOJ2298】[HAOI2011]problem a DP

[BZOJ2298][HAOI2011]problem a Description 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n,接下来n行每行两个整数,第i+1行的两个整数分别代表ai.bi Output 一个整数,表示最少有几个人说谎 Sample Input 3 2 0 0 2 2 2 Sample Output 1 HINT 100%的数据满足: 1≤n≤100000   0≤

bzoj 2301: [HAOI2011]Problem b 莫比乌斯反演

2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 3679  Solved: 1648[Submit][Status][Discuss] Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数n,接下来n行每行五个整数,分别表示a.b.c.d.k Outp

BZOJ 2301: [HAOI2011]Problem b(莫比乌斯反演 + 容斥原理 + 分块优化)

传送门 Problem 2301. – [HAOI2011]Problem b 2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 3671  Solved: 1643[Submit][Status][Discuss] Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input