題意:長度為n的序列a,定義f(x) 為x的各個數字相乘.
n<=2e5, 0<=a[i],k<=1e18. 問有多少對(i,j) 滿足f(a[i])*f(a[j]) 可以表示為某個自然數的k次冪.
f(x)= a1^p1 * a2^p2...ak^pk. f(y)=a1^q1*a2^q2..ak^qk
那麼f(x)*f(y)為某個x的k次冪, 則p1+q1肯定為k的倍數 .
因為ai只有4種可能,2,3,5,7. 用4維陣列或者map,int> 儲存每個數的質因子冪的狀態,求下每個冪關於k的補集即可.
0^0=1 特判k==0的狀態即可.
#include using namespace std;typedef long long ll;
typedef pairii;
const int n=2e5+5,m=19;
ll n,k,x,pw[n];
ll mp[m*3][m*2][m][m];
int main()
if(flag)
if(k==0)
p2%=k;
p3%=k;
p5%=k;
p7%=k;
int q2=k-p2,q3=k-p3,q5=k-p5,q7=k-p7;
q2%=k;
q3%=k;
q5%=k;
q7%=k;
if(q2<=18*3&&q3<=18*2&&q5<=18&&q7<=18)
res+=mp[q2][q3][q5][q7];
res+=zero;
//cout
} //cout
cout
}
牛客 2020 11 14牛客小白月賽29 B
by 041 本人原文 簡單的說,對於乙個bool量x x 1 x x 0 0 x 1 1 x 0 x x 1 x x 0 x 所以,對於每一次操作,在有影響 上面的2 3 5三種情況 到的位置加入相應操作的標記最後整合就行 對於第i位 0的操作 清空之前該位置所有的操作,加上標記1 對於第i位 1...
牛客小白月賽29 B二進位制
牛客小白月賽29 b二進位制 題目描述 scimoon 有乙個壞掉的計算器,這個計算器僅接受 0 sim 2 1 的數 這個計算器只支援一種操作,舉個例子,輸入乙個數 x,這個數會按順序進行 n 次操作,在第 i 次操作中,有乙個操作符 op i 和乙個數 a i 如果 op i 1 表示這次操作是...
牛客挑戰賽38 B 子串翻轉
題目鏈結 思路 用乙個大小為m雙端佇列的雙端佇列 維護一下當前視窗的串是啥。翻轉就是把標記變一下。根據標記進行字元的進出。include using namespace std typedef long long ll const int n 3e6 10 define fi first defin...