栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3548 Chess Board

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3548 Chess Board

#include <cmath>#include <ctime>#include <iostream>#include <string>#include <vector>#include <cstdlib>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;long long N,M,m,n,T;int map[2010][2010];long long a,b;bool Judge(){ if(a>=b && b>=1 && b*(m+1)+m*a==M && b*(n+1)+n*a==N) return true; return false;}char str[2010][2010];int goal[2010][2010];int vis[300];int link1[300];vector<int>edge[500];int shuang;bool find(int k){ for(int p=0;p<edge[k].size();p++) { int v=edge[k][p]; if(vis[v]==shuang) continue; vis[v]=shuang; if(link1[v]==-1||find(link1[v])) { link1[v]=k; return 1; } } return 0;}bool H[300],L[300];int main(){ //freopen("//home/fpy/input.txt","r",stdin); while(scanf("%lld%lld%lld%lld%lld",&N,&M,&n,&m,&T)!=EOF) { for(int i=1;i<=N;i++) { scanf("%s",str[i]); for(int j=1;j<=M;j++) if(str[i][j-1]=='1') map[i][j]=1; else map[i][j]=0; } bool cao=false; b=0; if(m==n) { if(N==M) cao=true; else goto FUCK; } else b=(N*m-n*M)/(m-n);  a=(M-b*(m+1))/m; if(!Judge() && !cao) { FUCK:; puts("-1"); continue; } long long ret=-1; for(b=1;b<=N/(n+1);b++) { if(!cao) b=(N*m-n*M)/(m-n); a=(M-b*(m+1))/m; if(a<b) break; if(Judge()) { long long ans=0; for(int j=1;j<=m+1;j++) { bool flag=false; for(int i=1;i<=n && !flag;i++) { for(int h=b+(i-1)*(a+b)+1;h<=b+(i-1)*(a+b)+a && !flag;h++) for(int l=(j-1)*(a+b)+1;l<=(j-1)*(a+b)+b && !flag;l++) if(0!=map[h][l]) flag=true; L[j]=flag; ans+=flag; } } for(int i=1;i<=n+1;i++) { bool flag=false; for(int j=1;j<=m && !flag;j++) { for(int h=(i-1)*(a+b)+1;h<=(i-1)*(a+b)+b && !flag;h++) for(int l=b+(j-1)*(a+b)+1;l<=b+(j-1)*(a+b)+a && !flag;l++) if(0!=map[h][l]) flag=true; H[i]=flag; ans+=flag; } } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { bool flag=false; for(int h=b+(i-1)*(a+b)+1;h<=b+(i-1)*(a+b)+a && !flag;h++) for(int l=b+(j-1)*(a+b)+1;l<=b+(j-1)*(a+b)+a && !flag;l++) if(1!=map[h][l]) flag=true; ans+=flag; } int id=0; for(int i=1;i<=n+1;i++) { edge[i].clear(); if(!H[i]) for(int j=1;j<=m+1;j++) { if(L[j])continue; bool flag=false; for(int h=(i-1)*(a+b)+1;h<=(i-1)*(a+b)+b && !flag;h++) for(int l=(j-1)*(a+b)+1;l<=(j-1)*(a+b)+b && !flag;l++) if(0!=map[h][l]) flag=true; if(flag)  edge[i].push_back(j); } } memset(vis,-1,sizeof(vis)); memset(link1,-1,sizeof(link1)); shuang=0; for(int i=1;i<=1+n;i++) { shuang++; if(find(i)) ans++; } if(ret==-1 || ret>ans) ret=ans; if(!cao) break; } if(!cao) break; } if(ret<0) puts("-1"); else printf("%lldn",ret*T); } return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号