1. 程式人生 > >【ACM-2017四川省賽】G . 2017

【ACM-2017四川省賽】G . 2017

題目描述

G. 2017

Given a, b, c, d, find out the number of pairs of integers (x, y) where a ≤ x ≤ b, c ≤ y ≤ d and x · y is multiple of 2017.

Input

The input contains zero or more test cases and is terminated by end-of-file.
Each test case contains four integers a, b, c, d.
• 1 ≤ a ≤ b ≤ 109 , 1 ≤ c ≤ d ≤ 109
• The number of tests cases does not exceed 104

Output

For each case, output an integer which denotes the result.

Sample Input

1 2017 1 2016
1 1000000000 1 1000000000

Sample Output

2016
991324197233775

題意分析

從題目描述中可以很輕易的讀懂(英語渣 _ ),就是給定區間 [ a , b ] , [ c , d ] , 然後分別在兩個區間中各找一個數 x , y , 要求 x 屬於第一個區間, y 屬於第二個區間,並且 x * y 是2017的倍數。

拿到這道題目的時候其實我是很開心的,畢竟分析了下就有了思路(畢竟大家都說是水題噠)

解題分析

首先,2017是一個素數,那麼要想 x * y 是2017的倍數,x , y 必定存在至少一個數是2017的倍數

當選定了一個數,假定是 x , 那麼 y 無論何值都滿足條件(注意 a b c d 的範圍都是1 到1e9)

對於一個區間中,找出2017的倍數,第一種方法是篩法求,其實這種方法效率已經很高了。不過還有更為高效的方法:就 [ a , b ] 區間來說,令 m = b/2017, n = a/2017 , 很顯然,m - n在大多數情況下就能直接得到此區間中2017的倍數有多少個,但是注意,當 a 也是2017的倍數的時候,應為 m - n + 1 (此點也是一直卡住我的地方,當時想到了會多一個,但是在判斷是否 +1 的這個條件的時候,誤以為是隻要 a/2017不為0時則加1,從而導致WA,心累呀)

由上邊得到了 m 和 n 後,我們能夠得到 m*len2(第二個區間的長度),n*len1(第一個區間的長度)之和則為所有的可能數,但是在這樣的情況下,我們會發現我們有可能會存在多加的情況,當兩個區間有交集並且交集中存在2017的倍數的情況下,此時我們會多加一定的可能數,那麼我們如何去解決這種情況呢?

第一種方法:既然我們已經算出了 m*len2 + n*len1, 那麼我們只需要減去對應的重複項即可,即查找出兩個區間中重複的2017的倍數項的個數 x,那麼結果即為 res = m*len2 + n*len1 - x*x
第二種方法:我們逆向思考,我們需要的是符合條件的,那麼是不是總數 - 不符合條件數即可呢?我們想下,題目中的總數即為len1 * len2 , 不符合條件的即為 (len1 - m) * (len2 - n) ,那麼結果 res = len1 * len2 - (len1 - m) * (len2 - n)

AC程式碼

#include <bits/stdc++.h>
using namespace std;
int main(){
    long long a,b,c,d;
    while(cin>>a>>b>>c>>d){
        long long len1 = b-a+1;
        long long len2 = d-c+1;
        long long m= 0 ,n=0;
        m = b/2017 - a/2017;
        if(a%2017 == 0){
            m++;
        }
        n = d/2017 - c/2017;
        if(c%2017 == 0){
            n++;
        }
        unsigned long long res = 0;
        res = len1*len2 - (len1-m)*(len2-n);
        cout<<res<<endl;
    }
    return 0;
}

注:

如有錯誤,歡迎dalao評論指正
.

相關推薦

ACM-2017四川省G . 2017

題目描述 G. 2017 Given a, b, c, d, find out the number of pairs of integers (x, y) where a ≤ x ≤ b, c ≤ y ≤ d and x · y is multiple of

原根動態規劃bitset2017四川省 K.2017 Revenge

iostream 我們 eset main pen 乘法 四川 動態 概論 題意: 給你n(不超過200w)個數,和一個數r,問你有多少種方案,使得你取出某個子集,能夠讓它們的乘積 mod 2017等於r。 2017有5這個原根,可以使用離散對數(指標)的思想把乘法轉化成加

2017四川省D題《Dynamic Graph》

void 一個 log 白色 () eset using 範圍 題意 題意:給出一個n個點m條邊的有向無環圖(DAG),初始的時候所有的點都為白色。然後有Q次操作,每次操作要把一個點的顏色改變,白色<->黑色,對於每次操作,輸出滿足下列點對<u,v>

自創模擬set1 題解

T2 本來想在 $T2$ 搞一道動態規劃題,但現在好像不是了……出成了一道毒瘤結論題。 題目背景和板子啥的來源於我以前在luogu存的一道自創題。 100pts 這個點甚至卡 $O(n*log(n^2))$,而二分肯定是不能去掉的,所以我們考慮去掉鏈上對區間答案的維護的那一維 $log$。 我們重新

Jiu Yuan Wants to Eat2018焦作網路樹鏈剖分

題目連結 樹鏈剖分學習筆記,可以看這裡   這道題還真挺好的,以前不會做,現在想了發現,學過樹鏈剖分之後,剩下的部分就是處理去反那塊比較的不容易些了,但是想了一下午,現在還是給我敲出來了,我們主要難處理的就是關於求反,那麼怎麼處理求反?   一開始讀題的時候,我還

2018瀋陽網路不太敢自稱官方的出題人題解

A. Gudako and Ritsuka 連結 by Yuki & Asm.Def 期望難度:Hard- 考慮從後往前進行博弈動態規劃,在這一過程中維護所有的先手必勝區間。區間不妨採用左開右閉,方便轉移。 考慮一次轉移,如果當前Servant的後一個位置屬於對手,則當前Servant的必勝區間可以通

2018年東北UPC-7226 Memory Banks(模擬儲存)

題目描述 We have purchased 60 different types of memory banks, typed as 0 to 59, A bank of type i has 2i

2018icpc北京網路數學貪心思維條件極值

【連結】 【題意】 已知 :sigma | ai |=r 最小化:sigma ((bi-ai)^2) 求每個ai 【分析】 將中心點移動到原點。相當於:要ai-1,顯然是大的那個數-1比較小。然後想象一下,最後的ai一般來說都是,幾個數都是最大的數,其餘數不改

LCM Walk2015上海現場推理

題意:有已知的[ex, ey],求可以由[sx+lcm(sx, sy), sy]或者[sx, sy+lcm(sx, sy)]得到,求這樣的[sx, sy]的數目,當然,[ex, ey]也算是一組。 一道推理題,顯而易見,知[ex, ey]那我們得把關係聯絡起來,[sx+sx

初中OJ1994普及組模擬小口口矩陣

題目被我吃了。。。 因為直接暴力會超時,所以我們要想一下優化。 因為列舉的順序是這樣的: 所以我們就可以很輕鬆(?)地發現一個規律: 當列舉一個位置時,被改變的只有當前位置,當前位置的上一格

普及組模擬取物品

題目描述 現在有 n 個物品(有可能相同),請程式設計計算從中取 k 個出來, 有多少種不同的取法。 輸入 輸入檔案有兩行。 第一行包含兩個整數 n,k(2<=n<=30,0<

普及組模擬Note

題目描述 數學課上,D突然想到一件很重要的事情要告訴Z,但是她們分別坐在教室的左前方和右後方,這可怎麼辦呢? D決定傳紙條! 但是問題又出現了,D要告知Z的是個機密,D不希望有很多人知道。可是由於紙條必須經過其它同學,所以D只

JZOJ(中山紀中) 1984. 普及組模擬遊戲(atlantis.pas/cpp)

題目: http://blog.csdn.net/qq_35786326/article/details/79211470 題意: 求每一局遊戲的勝者是誰?而如果是MaoLaoDa勝,那麼還有輸出t

重慶市NOIP模擬資料

資料 時間限制: 1 Sec 記憶體限制: 128 MB 提交: 58 解決: 31 [提交][狀態][我的提交] 題目描述 Mr_H 出了一道資訊學競賽題,就是給 n 個數排序。輸入格式是這樣的: 試題有若干組資料。每組資料的第一個是一個整數

洛谷月洛谷三月月題解報告

現在 圖片 數字 div 但是 格式 image 投票 cin   昨天就是洛谷三月月賽,小編考的並不好,才31分,隔壁大佬50分,於是小編決定改一改題,先看第一題:                   P5238 整數校驗器 題目描述 有些時候需要解決這樣一類

2017年浙工大迎新熱身賽 Lcayun日常之賞月易錯特判

pre 周期 yun namespace != names bject cpp div 題目描述 在cayun星球月亮大小都有一個規律,月亮為每30天一個周期,在這30天的周期裏,月亮的大小分別為0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,

ACM-ICPC國際大學生程式設計競賽北京賽區(2017)網路(A+E+F+G+I)

目錄 A - Visiting Peking University(模擬) E - Territorial Dispute(數學幾何+思維) F - Cake(思維) G - Bounce(找規律) I - Minimum(線段樹模板題) A - Visiting

2017 烏魯木齊賽區網路 Islands(點強連通問題縮點+點強連通分量

題目連結:https://nanti.jisuanke.com/t/16955 【中文題意】給你一個有向圖,然後讓你加最少的邊使得全圖強連通(即從任意一個點出發,可以到達剩餘的所有點)。 【思路分析】非常經典的板子題。先找強連通分量,然後縮點後求邊的條數。

藍橋杯 2017B組C/C++對局匹配

題意就是給我們一串數  讓我們儘可能地取 約束條件是a[i] 和a[i]+k不能同時出現 所有元素之間相差k的元素都不能同時出現 讓我們求所能取到的最大的數的和是多少分析: dp思路,這個和樹形dp有點相似 就是列舉0~k 然後在每個這個元素上迭代加k 每個元素儲存兩個狀態

2017秋季Web安全測試訓練wp安恆

0x00編輯器的鍋 看到題目名字就差不多猜到了,swp檔案洩露,http://114.55.36.69:20380/.login.php.swp,下載拿到swp檔案,開啟虛擬機器,啟動kali,利用命令列執行vim -r login.php.swp,修復看到原始碼,很明顯的