题意分析

题目讲的主要是给你一个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);
}
}

【Bit String Reordering UVALive - 6832 】【模拟】的更多相关文章

  1. 贪心 UVALive 6832 Bit String Reordering

    题目传送门 /* 贪心:按照0或1开头,若不符合,选择后面最近的进行交换.然后选取最少的交换次数 */ #include <cstdio> #include <algorithm&g ...

  2. UVaLive 6832 Bit String Reordering (模拟)

    题意:给定一个01序列,然后让你你最少的操作数把这它变成目标. 析:由于01必须是交替出现的,那么我们就算两次,然后取最值. 代码如下: #pragma comment(linker, "/ ...

  3. coderforces Gym 100803A/Aizu 1345/CSU 1536/UVALive 6832 Bit String Reordering(贪心证明缺)

    Portal: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1345  http://codeforces.com/gym/100 ...

  4. csu - 1536: Bit String Reordering (模拟)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1536 不知道为何怎么写都写不对. 这题可以模拟. 虽然题目保证一定可以从原串变成目标串,但是不一定 ...

  5. 运用String类实现一个模拟用户登录程序

    package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...

  6. Codeforce-CodeCraft-20 (Div. 2)-B. String Modification (找规律+模拟)

    Vasya has a string s of length n. He decides to make the following modification to the string: Pick ...

  7. HDU 5414 CRB and String (字符串,模拟)

    题意:给两个字符串s和t,如果能插入一些字符使得s=t,则输出yes,否则输出no.插入规则:在s中选定一个字符c,可以在其后面插入一个字符k,只要k!=c即可. 思路:特殊的情况就是s和t的最长相同 ...

  8. 黑马程序员——String类

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  9. IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法

    IT第九天 上午 包 1.包的命名规则:域名.项目名称.模块名 2.如:Wfei.com.windows.login 访问限制符 1.四种访问限制符分别对应为: (1)default:默认的,默认为p ...

随机推荐

  1. Wpf窗口设置屏幕居中最前显示

    public Window()         {             InitializeComponent();             WindowStartupLocation = Win ...

  2. solidity智能合约字节数最大值及缩减字节数

    智能合约最大字节数 在Solidity中,EIP 170将contract的最大大小限制为24 KB .因此,如果智能合约内容过多,会导致无法进行发布操作. 减少压缩字节数方法 方法及变量命名 在一定 ...

  3. Java虚拟机详解(四)------垃圾收集器

    上一篇博客我们介绍了Java虚拟机垃圾回收,介绍了几种常用的垃圾回收算法,包括标记-清除,标记整理,复制等,这些算法我们可以看做是内存回收的理论方法,那么在Java虚拟机中,由谁来具体实现这些方法呢? ...

  4. hdu1241 油田计数

    具体思路:求联通块,在"@“的周围进行dfs,使用8个方向向量来代表搜索的方向 贴一下我的主要代码段: int dir[8][2]={{1,1},{-1,-1},{1,-1},{-1,1}, ...

  5. form提交的几种方式

    背景 一直使用postman作为restful接口的调试工具,但是针对post方法的几种类型,始终不明白其含义,今天彻底了解了下 form提交的来源 html页面上的form表单 <form a ...

  6. 进程间通信与ipcs使用7例

    进程间通信(IPC, inter-process communication)实现进程间消息的传递,对于用户地址空间相互独立的两个进程而言,实现通信可以通过以下方式: 由内核层面分配内存,两进程共享该 ...

  7. HashMap与ConcurrentHashMap在Java8的改进

    链接:http://www.cnblogs.com/huaizuo/archive/2016/04/20/5413069.html#undefined http://www.cnblogs.com/h ...

  8. SpringMVC 原理 - 设计原理、启动过程、请求处理详细解读

    SpringMVC 原理 - 设计原理.启动过程.请求处理详细解读 目录 一. 设计原理 二. 启动过程 三. 请求处理 一. 设计原理 Servlet 规范 SpringMVC 是基于 Servle ...

  9. window下 局域网内使用mysql,mysql 开启远程访问权限

    一.window 10 开启3306端口 1.按win键选择设置 2.搜索防火墙 3.选择高级设置 3.右键入站规则->新建规则 4.按照提示,规则类型选择端口,应用于tcp,特定本地端口输入3 ...

  10. 【数据结构】10.java源码关于LinkedHashMap

    目录 1.LinkedHashMap的内部结构 2.LinkedHashMap构造函数 3.元素新增策略 4.元素删除 5.元素修改和查找 6.特殊操作 7.扩容 8.总结 1.LinkedHashM ...