一條狹長的紙帶被均勻劃分出了\(n\)個格仔,格仔編號從\(1\)到\(n\) 。每個格仔上都染了一種顏色\(color_i\)用\([1,m]\)當中的乙個整數表示),並且寫了乙個數字\(number_i\)
定義一種特殊的三元組:\((x,y,z)\),其中\(x,y,z\)都代表紙帶上格仔的編號,這裡的三元組要求滿足以下兩個條件:
\(xyz\)是整數, \(x
\(color_x=color_z\)
滿足上述條件的三元組的分數規定為\((x+z)×(number_x+number_z)\) 。整個紙帶的分數規定為所有滿足條件的三元組的分數的和。這個分數可能會很大,你只要輸出整個紙帶的分數除以10,007所得的餘數即可。
第一行是用乙個空格隔開的兩個正整數\(n\)和\(m,n\)表紙帶上格仔的個數,\(m\)表紙帶上顏色的種類數。
第二行有\(n\)用空格隔開的正整數,第\(i\)數字\(number\)表紙帶上編號為\(i\)格仔上面寫的數字。
第三行有\(n\)用空格隔開的正整數,第\(i\)數字\(color\)表紙帶上編號為\(i\)格仔染的顏色。
乙個整數,表示所求的紙帶分數除以10007所得的餘數。
紙帶如題目描述中的圖所示。
所有滿足條件的三元組為: (1,3,5),(4,5,6) 。
所以紙帶的分數為(1+5)×(5+2)+(4+6)×(2+2)=42+40=82 。
對於第1組至第2組資料,1≤n≤100,1≤m≤5 ;
對於第3組至第4組資料, 1≤n≤3000,1≤m≤100 ;
對於第5組至第6組資料, 1≤n≤100000,1≤m≤100000 ,且不存在出現次數超過20的顏色;
對 於 全 部10組 數 據 ,1≤n≤100000,1≤m≤100000,1≤color_i≤m,1≤number_i≤100000
這題教會了我$ \sum $的化簡。
我們發現,奇偶位相同時顏色相同的都可以產生貢獻,在乙個奇偶性的某乙個同樣顏色的塊的答案為
\(\sum_^n \sum_^n (x_i+x_j)*(y_i+y_j)\)
\(x_i\)為數字,\(y_i\)為位置。
需要\(o(n)\)複雜度算出它
化簡前,先補充一下$\sum $的有關知識
優先順序比四則運算符低
\(\sum_^n a_i+b_i \leftrightarrow \sum_^n a_i+\sum_^n b_i\)
\(\sum_^n r*a_i \leftrightarrow r*\sum_^n a_i\)
\(\sum_^n \sum_^n a_ \leftrightarrow \sum_^n \sum_^n a_\)
則\(\sum_^n \sum_^n (x_i+x_j)*(y_i+y_j)\)
\(=\sum_^n \sum_^n x_i*y_i+x_i*y_j+x_j*y_i+x_j*y_j\)
\(=\sum_^n \sum_^n x_i*y_i+\sum_^n \sum_^n x_j*y_j+\sum_^n \sum_^n x_j*y_i+\sum_^n \sum_^n x_i*y_j\)
\(=\sum_^n (n-i)*x_i*y_i+\sum_^n (i-1)*x_i*y_i+\sum_^n y_i \sum_^n x_j+\sum_^n x_i \sum_^n y_j\)
\(=(n-1)\sum_^n x_i*y_i+\sum_^n y_i \sum_^n x_j+\sum_^n x_i \sum_^n y_j\)
先處理出字首和維護即可
code:
#include #include #define ll long long
const ll n=50010;
const ll mod=10007;
ll n,m,cnta,cntb,fa[21],fb[21];
struct node
std::sort(a+1,a+1+cnta);
std::sort(b+1,b+1+cntb);
for(ll i=1;i<=cnta;)
for(ll j=1;j<=cnt;j++)
}for(ll i=1;i<=cntb;)
for(ll j=1;j<=cnt;j++)
}printf("%d\n",ans);
return 0;
}
洛谷 P2671 求和
想要oi學得好,數學肯定不能少 看來我是永遠也學不好了 此篇博文較長 廢話較多 您可以選擇 寫在最前面 其實不需要用 long long 型別,只需在兩數相乘時先取模一次就行了 為什麼可行,請參見取模的百科 又是該死的數學知識 在下面的 中,既有用 long long 的,又有用 int 的,也是因...
洛谷P2671 求和 數論
題目傳送門 格式難調,題面就不放了。分析 zyys 的一道題。很顯然是大力推公式。我們分析一下題目,實際上限制條件就是 下標同奇偶且顏色相同的數,那麼我們先拿這個公式 x z num x num z 套三個變數 x,y,z 推一下 x z num x num z num x x num z z nu...
NOIP2015PJ 洛谷 P2671 求和
直接暴力肯定是不行的,我們需要把各種相同的顏色分離出來計算。但是只分離出來沒有用,因為三元組要求中間有乙個y。可以看出,x和z的奇偶性相同時,存在y使三元組成立。所以我們用兩個陣列儲存相同顏色的奇 偶情況,每次計算就變成計算這個序列的值。則原式 num 1 num 2 a num 1 a num 2...