【Bit String Reordering UVALive - 6832 】【模拟】
题意分析
题目讲的主要是给你一个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 】【模拟】的更多相关文章
- 贪心 UVALive 6832 Bit String Reordering
题目传送门 /* 贪心:按照0或1开头,若不符合,选择后面最近的进行交换.然后选取最少的交换次数 */ #include <cstdio> #include <algorithm&g ...
- UVaLive 6832 Bit String Reordering (模拟)
题意:给定一个01序列,然后让你你最少的操作数把这它变成目标. 析:由于01必须是交替出现的,那么我们就算两次,然后取最值. 代码如下: #pragma comment(linker, "/ ...
- 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 ...
- csu - 1536: Bit String Reordering (模拟)
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1536 不知道为何怎么写都写不对. 这题可以模拟. 虽然题目保证一定可以从原串变成目标串,但是不一定 ...
- 运用String类实现一个模拟用户登录程序
package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...
- 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 ...
- HDU 5414 CRB and String (字符串,模拟)
题意:给两个字符串s和t,如果能插入一些字符使得s=t,则输出yes,否则输出no.插入规则:在s中选定一个字符c,可以在其后面插入一个字符k,只要k!=c即可. 思路:特殊的情况就是s和t的最长相同 ...
- 黑马程序员——String类
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- IT第九天 - 包、访问修饰符、变量的内存分配、String类中常用方法
IT第九天 上午 包 1.包的命名规则:域名.项目名称.模块名 2.如:Wfei.com.windows.login 访问限制符 1.四种访问限制符分别对应为: (1)default:默认的,默认为p ...
随机推荐
- 湫湫系列故事——设计风景线 HDU - 4514
题目链接:https://vjudge.net/problem/HDU-4514 题意:判断没有没有环,如果没有环,通俗的讲就是找出一条最长的路,相当于一笔画能画多长. 思路:dfs判环. 最后就是没 ...
- loadrunner中的ie浏览器无法使用
我的loadrunner是12.55版本的,windows10系统 在我们学习loadrunner的过程中,会出现下面一个问题: 在录制脚本时,loadrunner中的ie浏览器无法使用处于飘红状态. ...
- 基于hprose-golang创建RPC微服务
Hprose(High Performance Remote Object Service Engine) 是一款先进的轻量级.跨语言.跨平台.无侵入式.高性能动态远程对象调用引擎库.它不仅简单易用, ...
- Mermaid
graph TD; A-->B; A-->C; B-->D; C-->D;
- linux100day(day3)--常用文本处理命令和vim文本编辑器
今天,来介绍几个常用文本处理命令和vim文本编辑器 day3--常用文本处理命令和vim文本编辑器 col,用于过滤控制字符,-b过滤掉所有控制字符,这个命令并不常用,但可以使用man 命令名| co ...
- (七)c#Winform自定义控件-进度条
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- (十)c#Winform自定义控件-横向列表
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- Mysql5.6对时间的处理精度问题
在业务处理需要使用new Date()来更新时间类型的字段时,数据库会对时间类型进行四舍五入处理,如果new Date()的更新时间与原时间间隔太短,数据库进行四舍五入之后,认为值没有变化,从而不更新 ...
- 由group by引发的sql_mode的学习
前言 在一次使用group by查询数据库时,遇到了问题.下面先搭建环境,然后让问题复现,最后分析问题. 一 问题复现 mysql版本 建表插入数据 表的结构 现在问题来了:我想查询上面表中每个部门年 ...
- net core WebApi——文件分片上传与跨域请求处理
目录 前言 开始 测试 跨域 小结 @ 前言 在之前整理完一套简单的后台基础工程后,因为业务需要鼓捣了文件上传跟下载,整理完后就迫不及待的想分享出来,希望有用到文件相关操作的朋友可以得到些帮助. 开始 ...