Wannafly挑戰賽27 A 灰魔法師

2021-08-30 04:13:36 字數 1266 閱讀 9610

「white shores, and beyond. a far green country under a swift sunrise.」--灰魔法師

給出長度為n的序列a, 求有多少對數對 (i, j) (1 <= i < j <= n) 滿足 ai + aj 為完全平方數。

第一行乙個整數 n (1 <= n <= 105)

第二行 n 個整數 ai (1 <= ai <= 105)

輸出乙個整數,表示滿足上述條件的數對個數。
示例1

複製

3

1 3 6

複製

2
思路:首先能想到ai+aj最大和也就是2e5,同時2e5以內的平方數只有400多個,可以直接打表存下來,記為p[i]。

然後我們把每個a[i]做標記(同時統計個數),用p[i]去掃瞄a[i],已知p[1],令p[1]-ai,所得差即為另乙個數aj,如果能在a[i]裡找到(即a[j]被標記),說明這個平方和p[1]成立。複雜度o(1e2*1e5)。

接下來需要考慮兩種情況:

1。完全相同的數組合:2 2 2    此時方案是3,我們標記陣列應該是vis[2]=3,那麼都是相同的數字,任選兩個的方案數:c[3,2],即(n*(n-1))/2

2.不同的數字組合:1 1 3 3   此時方案是4,標記陣列vis[1]=2,vis[3]=2,直接vis[1]*vis[3]就是方案數,由於重複計算(vis[3]*vis[1]),這個情況的答案需要/2,1情況不需要。

總之就是結果統計需要考慮相同數字的情況,情況就這兩種- -。

#include #define ll long long

using namespace std;

ll vis[100010],n,a[1010],pos,ans1,ans2;

ll ans;

int main()

ans1=ans2=0;

ll tmp;

for(ll i=1;i100000)continue; //不合法範圍

if(tmp<=0)break; //不合法

if(vis[tmp])}}

ans1=ans1+ans2/2;

printf("%lld\n",ans1);

}return 0;

}

牛客網Wannafly挑戰賽27 A 灰魔法師

white shores,and beyond.a far green country under a swift sunrise.灰魔法師 給出長度為n的序列a,求有多少對數對 i,j 1 i j n 滿足 ai aj 為完全平方數。第一行乙個整數 n 1 n 105 第二行 n 個整數 ai 1...

牛客Wannafly挑戰賽27 A 灰魔法師

感謝大佬 講解非常仔細 做題的時候也有想過去打表,然後就沒有了,還是沒有找到其中的規律。這裡補一條完全平方數的定義?這個數開根號後是整數如 9,25,36 因為題目資料是1e5,所以兩個數相加也只有2e5,從1到2e5滿足條件的完全平方數個數也只有400 就用乙個陣列去記錄下來,然後for迴圈把給出...

Wannafly挑戰賽A 概率DP

給你乙個長 n 的序列,m 次查詢 每次查詢給乙個 x,然後 從序列的最左端 1 開始,每次隨機的選擇乙個右端點 r,如果兩個端點間的區間和不超過 x 就進行一次分割,然後把左端點變成 r 1,否則一直隨機下去。問這樣分割出來的期望段數 第一行兩個數 n,m 之後一行 n 個數表示這個序列 之後m行...