【SDOI2011】【BZOJ】【P2241】【打地鼠】【题解】
2014-02-06 19:20
375 查看
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2241
题解:
1.按照s从大到小枚举,判断是否合法
2.如果s不能整除地鼠数目和,不合法
3.从左上开始枚举判断
题解:
1.按照s从大到小枚举,判断是否合法
2.如果s不能整除地鼠数目和,不合法
3.从左上开始枚举判断
/* ID:zky OJ:BZOJ Index:2241 Language:C++ */ #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n,m,num=0; int sum=0; int map[101][101]; int now[101][101]; struct node{ int r,c,s; }h[10001]; bool cmp(node a,node b){ return a.s<b.s; } void init(){ cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>map[i][j],sum+=map[i][j]; } void next(int &x,int &y){ if(y<m)y++; else{ x++; y=1; } } void maptonow(){ for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) now[i][j]=map[i][j]; } bool ok(int r,int c){ int x=1,y=1; maptonow(); while(x<=n&&y<=m){ int t=now[x][y]; if(!now[x][y]){ next(x,y);continue; } if(x+r-1>n||y+c-1>m)return false; for(int i=x;i<=x+r-1;i++) for(int j=y;j<=y+c-1;j++){ if(now[i][j]>=t) now[i][j]-=t; else return false; } } return true; } void zky(){ //for R C for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ node x; x.r=i; x.c=j; x.s=i*j; h[++num]=x; } sort(h+1,h+1+n*m,cmp); for(int i=num;i>=1;i--){ if(sum%h[i].s)continue; if(ok(h[i].r,h[i].c)){ cout<<sum/h[i].s<<endl; return; } } } int main(){ init(); zky(); return 0; }//蒟蒻什么省选题都不会做,如有雷同,就是抄的
相关文章推荐
- 【bzoj 2241】【SDOI2011】打地鼠 题解&代码(C++)
- BZOJ2241 [SDOI2011]打地鼠 题解&代码
- BZOJ 2241([SDOI2011]打地鼠-二分判断+贪心)
- 【bzoj2241】[SDOI2011]打地鼠 暴力+乱搞
- 【BZOJ】【P2243】【SDOI2011】【染色】【题解】【树链剖分】
- BZOJ 2241 [SDOI2011] 打地鼠
- BZOJ 2241: [SDOI2011]打地鼠 暴力
- bzoj 2241: [SDOI2011]打地鼠
- bzoj2241: [SDOI2011]打地鼠
- 【题解】Casting Spells LA 4975 UVa 1470 双倍回文 SDOI 2011 BZOJ 2342 Manacher
- 【枚举】【SDOI 2011】【bzoj 2241】打地鼠
- bzoj2241【sdoi2011】打地鼠
- 【SDOI2011】【BZOJ】【P2242】【计算器】【题解】【快速幂+扩展欧几里得+高次同余方程/BSGS】
- bzoj 2241: [SDOI2011]打地鼠(暴搜+减枝)
- BZOJ2242:[SDOI2011]计算器——题解
- BZOJ 2241: [SDOI2011]打地鼠
- BZOJ 2241 SDOI2011 打地鼠 线性筛+二阶差分
- BZOJ2242 [SDOI2011]计算器 题解&代码
- bzoj 2241 [SDOI2011]打地鼠
- BZOJ2243 [SDOI2011]染色 题解&代码