Bit String Reordering
来源:互联网 发布:网速数据控制器 编辑:程序博客网 时间:2024/05/16 01:56
题目来源:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=139521
输入:
6 31 0 0 1 0 11 3 2
输出:1
题意:
输入:n m (1<n<15,1<m<n)
第二行:n个数(只含1和0)
第三行:m个数
问用n个数1与0要移动多少次(相邻才能移动),利用1与0间隔个数才能表示出m个数
输入移动次数;
例:
1 2 3 4 5 6
1 0 0 1 0 1
把下标为4的数与下标为5的数移动一次,变成:
1 2 3 4 5 6
1 0 0 0 1 1
与 : 1 3 2 刚刚好
输出:1
思路:贪心
从左往右依次扫,开始只有两种情况,要么是以0开始,要么就是为1开始。
首先就把以1或0开始定下来。
然后,根据输入的m个数,来把n中每一段取出来,经行处理,如果发现这一段中有不符合的,就在往后最近的位置找一个符合的,下标相减,就是移动的次数。为了方便,最好在存N个数的时候下标从1开始。
如果既可以从1开始,又可以从0开始,就两种都算一次,取小的那一个。
#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;int s1[20],s2[20],n;int MAX=1000000000;int fun1(int j,int v){ int k,t,ans=0; v^=1; for(k=j+1;k<=n;k++) { if(s1[k]==v) { ans=k-j; t=s1[k];s1[k]=s1[j];s1[j]=t; break; } } return ans;}int fun2(int j,int v){ int k,t,ans=0; if(v) v=0; else v=1; for(k=j+1;k<=n;k++) { if(s2[k]==v) { ans=k-j; t=s2[k];s2[k]=s2[j];s2[j]=t; break; } } return ans;}int main(){ int i,j,m,x,f,ans1,ans2,a[20],x1,x0,y,z; while(scanf("%d%d\n",&n,&m)==2) { ans1=ans2=0; x1=x0=y=0; for(i=1;i<=n;i++) { scanf("%d",&s1[i]); s2[i]=s1[i]; if(s1[i]==0) x0++;//统计0的个数 else x1++;//统计1的个数 } for(i=1;i<=m;i++) { scanf("%d",&a[i]); if(i%2!=0) y+=a[i];//统计下标为奇数位数的和 } if(y==x1)//从1开始 { f=0;z=0; for(i=1,j=1;i<=m;i++) { for(j=z+1;j<=z+a[i];j++)//取出每一段 if(s1[j]==f) ans1+=fun1(j,s1[j]); f^=1; z+=a[i]; } MAX=ans1<MAX?ans1:MAX; } if(y==x0)//从0开始 { f=1; z=0; for(i=1,j=1;i<=m;i++) { for(j=z+1;j<=z+a[i];j++) if(s2[j]==f) ans2+=fun2(j,s2[j]); f^=1; z+=a[i]; } MAX=ans2<MAX?ans2:MAX; } printf("%d\n",MAX); } return 0;}
0 0
- Bit String Reordering
- Bit String Reordering
- Bit String Reordering UVALive
- UVALive 6832Bit String Reordering
- Uvalive 6832 Bit String Reordering
- CSU 1536 bit string reordering
- UVALive 6832Bit String Reordering
- Bit String Reordering(模拟题)
- UVALive 6832Bit String Reordering (模拟)
- UVALive - 6832 Bit String Reordering (找规律)
- Gym 100803A — Bit String Reordering
- 2014-2015 ACM-ICPC, Asia Tokyo Regional Contest A題:Bit String Reordering [bfs]
- 2014-2015 ACM-ICPC, Asia Tokyo Regional Contest A题 Bit String Reordering(暴力)
- http://codeforces.com/gym/100803/attachments A题 Bit String Reordering
- Memory reordering
- Microcomputer Principle - Memory Reordering
- 浅谈Memory Reordering
- Memory Reordering Caught in Act
- oracle字符串分割
- leetcode 201: Bitwise AND of Numbers Range
- 数据库行列转换(示例MySQL)
- Firefox火狐浏览器优化加速about:config配置
- Redis常规的主从方案
- Bit String Reordering
- Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)
- WEB-INF目录下的jsp页面如何访问?
- JaveScript DOM操作之表格操作(1)
- iOS文件下载(二)
- [数学]齐次线性方程组的解、SVD、最小二乘法
- C/C++语言面试题详细解答三
- 队列的美
- windows3.0与OS/2兼容的DIB(BITMAPCOREHEADER结构解析)