傳送門
直接普通莫隊敲上去。問題在於每只襪子對於答案的貢獻。1只襪子的恭喜是0,2只是1,3只是3……其實就是x的貢獻是\(1+2+3+...+(x-1)\),這裡直接等差數列求和就行了。
最後求出gcd,就可以得到最簡分式
#include #include #include #include #define maxn 50005
struct node g[maxn];
int book[maxn];
int cur[maxn],rec[maxn];
int n,m,size;
long long ans = 0;
long long gcd(long long a,long long b)
inline long long calc(long long x)
inline bool cmp(node a,node b)
inline void work(int x,int u)
int main()
for(int i=1;i<=m;++i)
size = sqrt(n);
std::sort(g+1,g+1+m,cmp);
std::memset(book,0,sizeof(book));
ans = 0;
int l = g[1].l,r = g[1].r;
for(int i=l;i<=r;++i) work(i,1);
for(int i=1;i<=m;++i)
return 0;
}
Luogu1501 國家集訓隊 Tree II
題目描述 一棵n個點的樹,每個點的初始權值為1。對於這棵樹有q個操作,每個操作為以下四種操作之一 u v c 將u到v的路徑上的點的權值都加上自然數c u1 v1 u2 v2 將樹中原有的邊 u1,v1 刪除,加入一條新邊 u2,v2 保證操作完之後仍然是一棵樹 u v c 將u到v的路徑上的點的權...
Luogu 1975 國家集訓隊 排隊
luogu 1975 題意 給出乙個長度為n的數列以及m個交換兩個數的操作,問每次操作後逆序對數量 時間,下標和數的大小三維偏序,把交換操作看成是減去兩個數再加上兩個數,套板子就好了 發現這種計數型別的cdq一般有兩種寫法 感覺應該都差不多,但有些題目用兩種方式寫也有一些優劣之分,比如這道題,用第二...
Luogu 2839 國家集訓隊 middle
感覺這題挺好的。首先對於中位數最大有乙個很經典的處理方法就是二分,每次二分乙個陣列中的下標 mid 然後我們把 mid 代回到原來的陣列中檢查,如果乙個數 a geq mid 那麼就把 s 記為 1 否則把 s 記為 1 然後對 s 跑一遍字首和,觀察是否有乙個區間的和不小於 0 讀清楚題意之後發現...