南陽 oj Mod 題目1317

2021-08-19 16:23:26 字數 1413 閱讀 7153

時間限制:

4000 ms  |  記憶體限制:

65535 kb

難度: 2

描述 mod是取餘運算,在程式中用符號"%"來表示。

如3 % 7 = 3,7 % 5 = 2,0 % 4 = 0。

ocean用巧妙的方法得到了乙個序列,該序列有

nn 個元素,我們用陣列

aa 來記錄(下標從

00 到

n−1ocean定義f[i] = (((i % a[0]) % a[1]) % ...) % a[n-1]。

現在ocean會給出q次查詢,每次給定乙個區間[l, r],他想快速知道f[l] + ... + f[r]的值。

輸入第一行輸入乙個整數t,代表有t組測試資料。

每組資料佔多行,第一行輸入乙個整數n,代表元素個數。

下面一行輸入n個整數ai。

下面一行輸入乙個整數q,代表q次查詢。

接下來q行,每行輸入兩個整數l, r,代表查詢的區間。

注:1 <= t <= 20,1 <= n,q <= 1000,1 <= ai <= 100000,1 <= l <= r <= 100000。

輸出對每組資料,依次輸出q行,每行輸出對應的查詢結果。

樣例輸入

2

5 5 4 3 2 1

41 100000

2 100000

3 100000

4 100000

55 5 5 5 5

41 100000

2 100000

3 100000

4 100000

樣例輸出

000

0200000

199999

199997

199994

1)這個題目資料規模比較大,適合使用打表法(一次性將所有資料計算出來,存入陣列中)

2)多次取餘,如果後面的除數大於前面的,無效可以去除

3)使用二分查詢(這裡使用c++模板庫的lower_bound()函式)

4)如果除數列表中有1,則所有結果都是0

#include #include #include #define maxsize_1 1010

#define maxsize_2 100010

using namespace std;

int a[maxsize_2]=;//存放打表資料

int b[maxsize_1];//存放除數

int main()}}

if(!flag)

a[i]=a[i-1]+k;}}

int q,l,r;

scanf("%d",&q);

while(q--)}}

return 0;

}

南陽題目169 素數

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 走進世博園某資訊通訊館,參觀者將獲得前所未有的尖端互動體驗,一場充滿創想和喜悅的資訊通訊互動體驗秀將以全新形式呈現,從觀眾踏入展館的第一步起,就將與手持終端密不可分,人類未來夢想的驚喜從參觀者的掌上展開。在等候區的夢想花園中,參...

南陽oj 題目57 6174問題

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 假設你有乙個各位數字互不相同的四位數,把所有的數字從大到小排序後得到a,從小到大後得到b,然後用a b替換原來這個數,並且繼續操作。例如,從1234出發,依次可以得到4321 1234 3087 8730 378 8352 85...

南陽oj 題目198 數數

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 我們平時數數都是喜歡從左向右數的,但是我們的小白同學最近聽說德國人數數和我們有些不同,他們正好和我們相反,是從右向左數的。因此當他看到123時會說 321 現在有一位德國來的教授在鄭州大學進行關於acm的講座。現在他聘請你來擔任...