題目鏈結
一道字首和的題目,以前做過類似的.分享一下思路
看到區間和其實就能想到要用字首和的方法了,不過怎麼用也是值得思考的乙個問題.
直接的做法:列舉所有區間,設t是完全平方數,a[i]-a[j-1] == t ans++.那麼如何判斷完全平方數呢?考察一下題目給的範圍.n<=1e5.a<=10,也就是說,最大的區間和也就是1e6級別的.可以用打表的方法先看看1-1e6裡面到底有多少個完全平方數.測試出來大概是1k個.那我們只需要預處理一下所有1e6以內的完全平方數就可以了.
不過1e5的級別列舉所有子區間代價也是不能接受的.所以要再加分析.觀察一下這個式子 a[i]-a[j-1] == t. 列舉a[j-1]的話不行.可以考慮列舉t 也就是轉換成 a[i]-t == a[j-1]
t最多也就大概1e3個.勉強可以接受.不過這裡就要注意乙個問題了.如果用map來存數的話.速度是不夠的.前面說了區間和最大也就1e6.陣列是可以開的下的.
具體細節看**吧.
#define ll long long
#define pb push_back
#include
#include
#include
using
namespace std;
const
int n =
1e7+10;
int a[n]
;vector<
int> v;
int mp[n]
;bool q[n]
;int
main()
int len = v.
size()
;for
(int i=
1;i<=n;
++i)
else
break;}
mp[a[i]]++
;}cout << ans << endl;
return0;
}
珂朵莉與失憶 SDUT
time limit 1000 ms memory limit 65536 kib submit statistic problem description 珂朵莉由於受到前世記憶的侵蝕會不斷地失憶。但是並不是每天都會失憶。失憶的發生條件是當且僅當這一天的編號為素數的時候,會失去這一天編號的數字之和...
Wannafly挑戰賽5A 珂朵莉與宇宙
時間限制 c c 2秒,其他語言4秒 空間限制 c c 65536k,其他語言131072k 64bit io format lld 星神是來自宇宙的 所以珂朵莉也是吧 所以我就出了個題 給你乙個長為n的序列a,有n n 1 2個子區間,問這些子區間裡面和為完全平方數的子區間個數 第一行乙個數n 第...
珂朵莉的約數
珂朵莉給你乙個長為n的序列,有m次查詢 每次查詢給兩個數l,r 設s為區間 l,r 內所有數的乘積 求s的約數個數mod 1000000007 輸入描述 第一行兩個正整數n,m 第二行乙個長為n的序列 之後m行每行兩個數l和r 輸出描述 對於每個詢問,輸出乙個整數表示答案 示例1輸入 複製5564 ...