51nod 1131 数列

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1131

1131 覆盖数字的数量

基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题

收藏

关注

给出一段从A - B的区间S(A,B为整数),这段区间内的整数可以随便使用任意次。再给出一段从X - Y的区间T,问用区间S中的整数做加法,可以覆盖区间T中多少个不同的整数。

例如:区间S为8 - 10,区间T为3 - 20。在3 - 20中,整数8(8),9(9),10(10),16(8+8),17(8+9),18(9+9),19(9+10),20(10+10)。可以被区间S中的数覆盖,因此输出8。

Input

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行4个数:A, B , X, Y,中间用空格分隔。(1 <= A < B <= 10^18, 1 <= X < Y <= 10^18)

Output

输出共T行,每行1个数,区间[X,Y]中可以由A-B中的整数相加得到的不同整数的数量。

Input示例

1
8 10 3 20

Output示例

8  首先要知道,[A,B]所能覆盖的区间是[k*A,k*B],这段区间一直往下走的话总会出现第一次重叠的地方,这时k*A之后的所有数字都可以表示出来了,因为所有的区间都将出现重叠。证明如下,假设第一次出现重叠是[k*A,k*B],[(k+1)*A,(k+1)*B], 那么有k*A+A<=k*B,  ==> k*A+A*2<=k*B+A<=k*B+B  ==>  (k+2)*A<=(k+1)*B ,  显然之后的区间也会重叠。然后暴力找找,重复时加一下break就好了。

虽然过了但我感觉还是可以卡的如果想的话,比如这组数据 100000000(A) 100000001(B) 1000000000000000000(X) 1000000000000000001(Y) 本机要跑300+ms,如果很多组这个的话肯定T了
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define LL  long long
 4 int main()
 5 {
 6     LL A,B,X,Y;
 7     int T,i,j;
 8     cin>>T;
 9     while(T--){
10         LL res=0;
11         scanf("%lld%lld%lld%lld",&A,&B,&X,&Y);
12         for(i=1;;i++)
13         {
14             if(i*A>Y)break;
15             if((i+1)*A<=i*B){
16                 if(i*A<=X) res=Y-X+1;
17                 else res+=Y-i*A+1;
18                 break;
19             }
20             else{
21                 if(i*A>=X&&i*B<=Y) res+=i*B-i*A+1;
22                 else if(i*B>=X) res+=i*B-X+1;
23                 else if(i*A<=Y) res+=Y-i*A+1;
24             }
25         }
26         printf("%lld\n",res);
27     }
28     return 0;
29 }
时间: 2024-12-19 06:40:08

51nod 1131 数列的相关文章

51Nod——T 1242 斐波那契数列的第N项

https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1242 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...) 给出n,求F(n)

51Nod - 1242 斐波那契数列的第N项

斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...) 给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可. Input输入1个数n(1 <= n <= 10^18).Output输出F(n) % 1000000009的结果.Sample Input 11 Sam

51nod 1242 斐波那契数列的第N项(矩阵快速幂)

1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...) 给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可. Input 输入1个数n(1 <=

(矩阵快速幂)51NOD 1242斐波那契数列的第N项

斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...) 给出n,求F(n),由于结果很大,输出F(n) % 1000000009的结果即可. 输入 输入1个数n(1 <= n <= 10^18). 输出 输出F(n) % 1000000009的结果. 输入样例 11 输出样例 89解:由于斐波那

51NOD 1491 黄金系统 &amp;&amp; Codeforces 458 A. Golden System(斐波那契数列 + 找规律)

传送门 q = 5√+12在黄金系统下面a0a1...an等于 ∑ni=0ai?qn?i,其中ai 是 0 或者 1. 现在给出两个黄金系统下面的数字,请比较他们的大小. Input 单组测试数据. 第一行有一个字符串 a . 第二行有一个字符串 b . 他们都是非空串,可能有前导 0,并且只有 0 和 1组成,长度不超过 100000. Output 如果 a>b,输出 >: 如果 a= b,输出 =: 如果 a<b,输出 <: Input示例 00100 11 Output示例

51Nod - 1094 和为k的连续区间

51Nod - 1094 和为k的连续区间 一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k. Input 第1行:2个数N,K.N为数列的长度.K为需要求的和.(2 <= N <= 10000,-10^9 <= K <= 10^9) 第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9). Ou

51nod水题记

妈呀51nod已经刷不动了又开始跟bzoj一样总是得看题解了...那么发一下总结吧... 1051:最大子矩阵 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t

九度1131:合唱队形

********************************************************************************** 晒题: 题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5059 解决:1601 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形.合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, K,他们的身高分别为T1,

51nod 1672 贪心/队列

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1672 1672 区间交 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 小A有一个含有n个非负整数的数列与m个区间,每个区间可以表示为li,ri. 它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大.(是指k个区间共同的交,即每个区间都包含这一段,具体可以参照样例) 在样例中,5个位置对应的值分别为1,2