【codevs2485】七夕祭(貪心,環形紙牌均分)
solution
1、首先行列獨立互相不影響,可以單獨統計。於是就變成了一個環形紙牌均分問題。
2、紙牌均分問題每行答案是
\sum_{i=1}^n|i*T/n-G[i]|
,其中T為總牌數,G[i]是a[i]的字首和,a[i]為每個人的牌數。(這裡考慮讓每個人一開始手中的牌數都減去 T/n
(為什麼要減,後面就有好處了),答案顯然不變(數學上也可以推匯出),每行答案即為\sum_{i=1}^nS[i]
,其中s[i]為b[i]字首和,b[i]=a[i]-T/n。) 3、對於環,可以拆為鏈,但是複雜度會上升。考慮從第k個人斷開,寫成一行,這n個人持有的紙牌數字首和分別為(a[k+1],s[k+1]-s[k]; a[k+2],s[k+2]-s[k];a[n],s[n]-s[k];a[1],s[1]+s[n]-s[k]);因為s[n]=0(前面已經減去了t/n,所以均分後每個人手中有0張牌)。所以答案就是
\sum_{i=1}^n|s[i]-s[k]|
,這裡可以列舉k得到最小值(那為什麼還要這麼麻煩的用在上面減去T/n呢,難道是為了公式好看?)不。。。也可以直接統計,因為,——到這裡就是一個貨倉選址問題。
codes
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100010;
int n, m, t;
int b[maxn], c[maxn], s[maxn];
long long calc(int a[], int n){
for(int i = 1; i <= n; i++){
a[i] -= a[0]/n;
s[i] = s[i-1]+a[i];
}
sort(s+1,s+n+1);
int ans = 0;
for(int i = 1; i <= n; i++)ans += abs(s[i]-s[n+1>>1]);
return ans;
}
int main(){
cin>>n>>m>>t;
for(int i = 1; i <= t; i++){
int x, y; cin>>x>>y;
b[x]++, c[y]++;
}
for(int i = 1; i <= n; i++)b[0]+=b[i];
for(int i = 1; i <= m; i++)c[0]+=c[i];
if(b[0]%n==0 && c[0]%m==0)
cout<<"both "<<calc(b,n)+calc(c,m)<<"\n";
else if(b[0]%n==0)
cout<<"row "<<calc(b,n)<<"\n";
else if(c[0]%m==0)
cout<<"column "<<calc(c,m)<<"\n";
else cout<<"impossible\n";
return 0;
}
相關文章
- 均分紙牌問題
- 【NOIP2002】【codevs1098】均分紙牌dev
- 1828:【02NOIP提高組】均分紙牌
- P1031 [NOIP2002 提高組] 均分紙牌
- 洛谷 P1031 [NOIP2002 提高組] 均分紙牌 題解
- 洛谷 P2503 [HAOI2006]均分資料 隨機化貪心隨機
- 貪心
- CF 1029E Tree with Small Distances 樹形DP or 貪心
- 反悔貪心
- Supermarket(貪心)
- 貪心例題
- 貪心+搜尋
- CF1039D You Are Given a Tree (樹形 dp + 貪心 + 根號分治)
- HDU 5821 Ball(貪心)
- 貪心模式記錄模式
- 反悔貪心雜題
- 貪心演算法演算法
- 貪心、構造合集
- 貪心-刪數問題
- 貪心-*活動選擇
- 24/03/20 貪心(一)
- HDU 6047 Maximum Sequence (貪心)
- HDU 5813 Elegant Construction (貪心)Struct
- 漲薪【貪心】【快速冪】
- Leetcode 貪心:差值調整LeetCode
- Least Cost Bracket Sequence(貪心)ASTRacket
- 刪數問題(貪心)
- 「貪心」做題記錄
- [反悔貪心] Add One 2
- 貪心 做題筆記筆記
- 7.5 - 貪心篇完結
- 貪心演算法Dijkstra演算法
- 牛客 tokitsukaze and Soldier 貪心
- 學一下貪心演算法-學一下貪心演算法演算法
- win10怎麼將蜘蛛紙牌固定到桌面_win10蜘蛛紙牌怎麼放到桌面Win10
- 貪心演算法(貪婪演算法,greedy algorithm)演算法Go
- 牛牛偶像養成記(貪心)
- 貪心(入門簡單題)