2020提高組模擬賽3 T1 白井黑子

2022-05-11 11:18:00 字數 2138 閱讀 5327

\(\text\):[2020提高組模擬賽3]白井黑子

\(\text\):

發現物品是無序的,可以每加入乙個數,就求它和前面的數能產生多少貢獻,然後記入答案。對於本題,發現利用容斥原理,可以將答案轉換為求出 \(f(a_)\times f(a_)\) 能被某個自然數的 \(k\) 次冪表示的 \((i,j)\) 對數,

當 \(k=0\) 時,\(f(a_)\) 不能為 \(0\),則對於 \(k=0\) 和 \(k\not=0\) 的情況分開討論。

對於 \(k=0\),\(x^(x\not=0)\) 的值為 \(1\),所以只用記錄有多少 \(f(a_)\) 的值為 \(1\) 即可。

對於 \(k\not=0\),發現當 \(f(a_)=0\) 時,它對答案產生了 \(i-1\) 的貢獻。並且,如果目前已經出現過 \(g\) 個 \(f(a_)=0\),則當 \(f(a_)\not=0\) 時,還要多產生 \(g\) 的貢獻。當 \(f(a_)\not=0\) 時,它的質因數個數最多只有四個,分別為 \(2,3,5,7\)。所以考慮對於 \(f(a_)\) 進行質因數分解。記四元組 \((p1,p2,p3,p4)\) 表示 \(f(a_)=2^\times 3^\times 5^\times 7^\) ,則要找到對應的四元組 \((q1,q2,q3,q4)\),使得 \(p1+q1\equiv 0 \pmod k\),\(p2+q2\equiv 0 \pmod k\),\(p3+q3\equiv 0 \pmod k\),\(p4+q4\equiv 0 \pmod k\)。這個東西用桶或者 \(\text\) 即可實現。

\(\text\):

#include #include #include #include #include #include #include #include #include #include #include #define ri register

#define inf 0x7fffffff

#define e (1)

#define mk make_pair

#define int long long

//#define double long double

using namespace std; const int n=200010;

inline int read()

while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch-'0'), ch=getchar();

return s*w;

}void print(int x)

int n,k,res,a[n],b[n],gg;

struct nodee[n];

map, pair>,int> q;

inline void speciald()

res+=qwq;

}printf("%lld\n",(n*(n-1)-res*(res-1))/2);

}signed main()

for(ri int i=1;i<=n;i++)

if(k)

int x=qwq;

while(x%2==0) e[i].p1++, x/=2;

x=qwq;

while(x%3==0) e[i].p2++, x/=3;

x=qwq;

while(x%5==0) e[i].p3++, x/=5;

x=qwq;

while(x%7==0) e[i].p4++, x/=7;

int q1=(k-e[i].p1)%k;

int q2=(k-e[i].p2)%k;

int q3=(k-e[i].p3)%k;

int q4=(k-e[i].p4)%k;

q1=(q1+k)%k, q2=(q2+k)%k, q3=(q3+k)%k, q4=(q4+k)%k;

res+=q[mk(mk(q1,q2),mk(q3,q4))];

res+=gg;

e[i].p1%=k, e[i].p2%=k, e[i].p3%=k, e[i].p4%=k;

q[mk(mk(e[i].p1,e[i].p2),mk(e[i].p3,e[i].p4))]++;

}printf("%lld\n",n*(n-1)/2-res);

return 0;

}

NOIP提高組模擬賽3

周圍大佬都說初中打過n遍,我乙個菜雞瑟瑟發抖。把斐波那契數列寫出來找了半天性質,用了半個多小時推出來 x兔子的父親,就是x減去是在斐波那契數列中最大的小於x的數 舉個栗子 13號兔子,應減去8,得到他的祖先5 10號兔子,應減去8,得到他的祖先2 預處理出斐波那契數列,然後讓ab中較大的到他的祖先,...

2023年9月15日提高組模擬賽 T3 密室

給定一些點的先決條件,問到達終點至少需要經過幾個點 可以把點與點之間的距離看作1,然後跑最短路 需要注意的事判斷的過程中弱國乙個乙個去判斷速度太過抵消,可以用狀態壓縮的方法表示一種狀態,正常轉移即可 include include include include using namespace st...

20200721NOIP提高組模擬T3 最小代價

給你n個點 n leq100000 所構成的邊帶權的無向圖,每個點都有黑或白兩種顏色之一,其中黑記為1,白記為0.現在要你選擇一些邊 選擇一條邊的代價即為此邊權值 用這些邊構成新的圖,使得新圖中每個白點都與黑點聯通,且每個白點到距離其最近的黑點的距離等於原圖中的最短距離.若不存在這樣的圖,輸出imp...