Codeforces 230C Shifts【思维】
来源:互联网 发布:青岛java招聘 编辑:程序博客网 时间:2024/06/02 15:28
题目大意:
每一行都可以将其循环挪位一下,问最少挪动多少下,能够使得某一列都是1.
思路:
①我们预处理出L【i】【j】表示第i行从位子j到最左边,距离j点最近的那个1的位子。
同理有R【i】【j】;
②然后我们再预处理出LL【i】表示第i行最左边的1的位子。
同理有RR【i】;
③那么我们O(m)枚举一列,表示最终这一列都是1,然后我们贪心的判断一下哪个1走过来最优即可。
过程维护一下。
Ac代码:
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;char a[150][15000];int L[150][15000];int R[150][15000];int LL[150];int RR[150];int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { memset(LL,-1,sizeof(LL)); memset(RR,-1,sizeof(RR)); memset(L,-1,sizeof(L)); memset(R,-1,sizeof(R)); for(int i=1;i<=n;i++)scanf("%s",a[i]+1); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(LL[i]==-1&&a[i][j]=='1')LL[i]=j; if(a[i][j]=='1')L[i][j]=j; else L[i][j]=L[i][j-1]; } } for(int i=1;i<=n;i++) { for(int j=m;j>=1;j--) { if(RR[i]==-1&&a[i][j]=='1')RR[i]=j; if(a[i][j]=='1')R[i][j]=j; else R[i][j]=R[i][j+1]; } } int output=0x3f3f3f3f; for(int i=1;i<=m;i++) { int sum=0; for(int j=1;j<=n;j++) { int A=15000000; int B=15000000; if(L[j][i]!=-1)A=i-L[j][i]; if(R[j][i]!=-1)B=R[j][i]-i; int C=15000000; int D=15000000; if(LL[j]!=-1)C=LL[j]+m-i; if(RR[j]!=-1)D=m-RR[j]+i; sum+=min(min(A,B),min(C,D)); } output=min(output,sum); } if(output>=15000000)printf("-1\n"); else printf("%d\n",output); }}
阅读全文
0 0
- Codeforces 230C Shifts【思维】
- CodeForces 230C Shifts
- codeforces 230C Shifts DP
- Codeforces 230C Shifts(模拟)
- Codeforces 230C Shifts(模拟+展开字符串)
- codeforces 220c Little Elephant and Shifts
- Codeforces Round #142 (Div. 2) C. Shifts
- Codeforces Round #142 (Div. 2) C. Shifts
- Codeforces Round #142 (Div. 2) C. Shifts
- 【codeforces 723C】 + 思维
- codeforces C. Queue (思维)
- codeforces-750【C思维】
- Codeforces 842C(思维)
- Shifts-Codeforces Round #142 (Div. 2) C (矩阵)
- Codeforces Round 421 Div.2 D. Mister B and PR Shifts 思维 乱搞
- Codeforces Round #421 (Div. 1):B. Mister B and PR Shifts 思维,乱搞
- CodeForces 820D Mister B and PR Shifts(思维题)
- codeforces 250/C 逆向思维
- python命名规范
- 栈回溯原理分析(图解)
- Android仿最新微信自定义相机(长按拍摄,轻点拍照)
- dlnuacm-book完成计划(gitbook的使用)
- C++之编码问题(Unicode,ASCII,本地默认)
- Codeforces 230C Shifts【思维】
- 《Deep Self-Taught Learning for Weakly Supervised Object Localization》
- Python数据挖掘入门与实践(二)——用scikit-learn估计器分类
- 程序设计中的堆和栈
- Android移动开发-使用摄像头和麦克风录制视频的实现
- Zookeeper的功能以及工作原理
- apache服务器开启Gzip压缩服务
- Scratch2.0编程--第十一节 运算符
- Java基础 -- 线程