题意分析

题目讲的主要是给你一个01串,然后给你要变成的01串格式,问你要转换成这一格式最少需要移动的步数。

题目不难,但当时并没有AC,3个小时的个人赛1道没AC,归根到底是没有逼自己去想,又想的太多,还没敢去想,还是太菜,最后把自己整崩溃了,过后看完别人代码发现此题并不难,模拟即可,现附具体分析如下。

分析:既然已经给了你具体要求的01串,那么这样的01串只能有两个。只需将转化成这两种01串所需要的步数取最小即可。现附AC代码如下。

AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
void Swap(int& a, int &b)
{
int t = b;
b = a;
a = t;
}
int getSum(int a[], int len)
{
int sum = 0;
for(int i = 0; i < len; i++)
sum += a[i];
return sum;
}
const int maxn = 20, INF = 0x3f3f3f3f;
int N, M;
int b[maxn], p, bb[maxn];
int cal()
{
if(getSum(b, N) != getSum(bb, N)) //若连和都不同,再交换相邻元素又有何用
return INF;
int cnt = 0, temp[maxn];
memcpy(temp, b, sizeof(b)); //这里要注意,将你要变换的串存储在一个临时的串中,这样在得到交换次数的同时又不会改变原串
for(int i = 0; i < N; i++)
{
if(bb[i] == temp[i]) continue;
for(int j = i + 1; j < N; j++)
{
if(bb[i] == temp[j]) //找到相等的后,依次交换相邻的元素,直到它到达指定位置
{
while(i < j)
{
Swap(temp[j-1], temp[j]);
--j;
cnt++;
}
break;
}
}
}
return cnt;
}
int main()
{
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
while(scanf("%d%d", &N, &M) != EOF)
{
memset(b, 0, sizeof(b));
for(int i = 0; i < N; i++)
scanf("%d", &b[i]);
int idx = 0, value = 1;
while(M--)
{
scanf("%d", &p);
while(p--)
bb[idx++] = value;
value ^= 1; //这里用异或的原因是利用它不进位的加法的特性
}
int minn = INF;
minn = min(minn, cal());
for(int i = 0; i < N; i++)
bb[i] ^= 1; //在看另一种符合要求的01串
minn = min(minn, cal());
printf("%d\n", minn);
}
}

最新文章

  1. Visual Studio 2012+jQuery-1.7.1
  2. 从C#中通过Windows窗体添加信息到数据库 (添加学生信息)
  3. jsp页面img利用tomcat配置访问服务器绝对路径显示图片
  4. iOS7隐藏顶部状态栏
  5. php 本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间
  6. python 处理异常
  7. ajax:$.get()
  8. hunnu 11313 无重复元素序列的最长公共子序列转化成最长递增子序列 求法及证明
  9. ASP.NET在主题中添加CSS文件
  10. 转:四种方案解决ScrollView嵌套ListView问题
  11. B4A的软件下载
  12. PHP修改记录
  13. php常用命令大全
  14. 详解变量声明加 var 和不加 var 的区别
  15. 正确在遍历中删除List元素
  16. Red Hat Enterprise 7.5 安装后无法进入图形界面 This system is not registered with an entitlement server. You can use subscription-manager to register.
  17. 033 Url中特殊字符的处理
  18. hihocoder1696 折线中点(几何)
  19. Quartz任务调度实践
  20. iOS数据持久化--数据库

热门文章

  1. thinkphp3.2集成极光推送
  2. 洛谷P1510 题解
  3. kubeadm源码分析
  4. 关于dfs的套路
  5. centos yum 安装 mariadb
  6. Chrome 开发工具之 Memory
  7. alluxio源码解析-层次化存储(4)
  8. WebService—— IDEA创建WebServices
  9. 《机器学习基石》---VC维
  10. (十三)c#Winform自定义控件-导航菜单