bzoj 3032 七夕祭 | 中位数
2015-11-16 10:39
239 查看
显然行和列的交换是独立的。无解就是没办法均分。然后就变成了那年直升生面试的题了,给定一个圈,每个人可以给左右两个人分东西,问给出东西的最小值。然后是白书P5的模型。
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define md #define ll long long #define inf (int) 1e9 #define eps 1e-8 #define N 200010 using namespace std; int a ,p [2],c ; int K,n,m; ll solve(int d,int ave,int mx) { memset(a,0,sizeof(a)); for (int i=1;i<=K;i++) a[p[i][d]]++; int sum=0; for (int i=1;i<=K;i++) c[i]=c[i-1]+a[i]-ave; sort(c+1,c+mx+1); int mid=c[(mx+1)>>1]; ll ans=0; for (int i=1;i<=mx;i++) ans+=abs(c[i]-mid); return ans; } int main() { scanf("%d%d%d",&n,&m,&K); for (int i=1;i<=K;i++) { scanf("%d%d",&p[i][0],&p[i][1]); } int b=0; ll ans=0; if (K%n==0) { b++; ans+=solve(0,K/n,n); } if (K%m==0) { b+=2; ans+=solve(1,K/m,m); } if (b==0) printf("impossible\n"); else if (b==1) printf("row %lld\n",ans); else if (b==2) printf("column %lld\n",ans); else printf("both %lld\n",ans); return 0; }
相关文章推荐
- bzoj 2594 水管局长 | LCT | 最小生成树
- bzoj 3706 反色刷 | 一笔画
- bzoj 3108 图的逆变换
- bzoj 2660 最多的方案 | 斐波那契数列
- bzoj 1187 神奇的游乐园 | 插头dp
- bzoj 2173 整数的lqp拆分 | dp | 找规律
- poj 2411| 插头dp
- bzoj 2660 最多的方案 | dp
- bzoj 3170 松鼠聚会 | 旋转坐标
- bzoj 1537 bus|cdq分治
- bzoj 2257 瓶子和燃料
- bzoj 3398 牡牛和牝牛
- bzoj 3534 重建
- bzoj 4017 小Q的无敌异或
- bzoj 1002 轮状病毒
- bzoj 3288 矩阵
- bzoj 4031 小z的房间
- bzoj 4004 装备购买
- 容斥原理
- 主席树&树状数组套主席树