dp 20190617
这个标的是dp,但是我感觉就只能算思维题,不是特别难,
你仔细想想就知道,你先求出01这样子满足条件的个数,如果要进行改变,最多只可以增加两个,也可以增加一个或者不增加。
如果有连续的两个1或者0那么肯定至少可以增加一个,如果有两个不同的00 或者11 或者是两个11连续 或者两个00不连续 或者三个相同的0或者1都是可以增加两个的。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#define inf 0x3ff3f3f
using namespace std;
const int maxn = 1e6 + ;
char a[maxn];
int num[maxn]; int main()
{
int n;
scanf("%d", &n);
scanf("%s", a + );
int len = strlen(a + );
int ans = ;
int f = ;
for(int i=;i<=len;i++) num[i] = a[i] - '';
int flag = num[];
for(int i=;i<=len;i++) if (num[i] == !flag) flag = num[i], ans++;
for (int i = ; i < len; i++) if (num[i] == num[i + ]) f = ;
//printf("%d\n", ans);
int ex = ;
if(f) printf("%d\n", ans);
else
{
for(int i=;i<len;i++)
{
if(num[i]==num[i+])
{
ex++;
int x = i;
while (num[x] == num[x + ]) x++;
i = x;
}
}
for (int i = ; i < len - ; i++) if (num[i] == num[i + ] && num[i] == num[i + ]) ex = ;
if (ex >= ) printf("%d\n", ans + );
else printf("%d\n", ans + );
}
return ; }
/*
56
10101011010101010101010101010101010101011010101010101010
*/
A
这个题目不是很难,思维题,这个题目有几种情况要考虑,
第一个是存在1的情况,那么答案就是n-flag,flag表示1的数量。
第二个就是看他们的所有数gcd是不是等于1 如果不是那么就输出-1
第三个就是gcd==1 所以但是没有1 这个时候我们就可以找到每一个一段进行gcd==1 把所有的段都保存下来,然后求最小的数值让他gcd==1
找到之后就再加上n-1即可。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <algorithm>
#include <vector>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 2e3 + ;
queue<int>que;
int a[maxn]; int gcd(int a,int b)
{
return b == ? a : gcd(b, a%b);
} int main()
{
int n;
scanf("%d", &n);
int flag = ;
for (int i = ; i <= n; i++) {
scanf("%d", &a[i]);
if (a[i] == ) flag++;
}
if(flag)
{
printf("%d\n", n - flag);
return ;
}
flag = ;
int ans = a[];
int ax = a[];
for(int i=;i<=n;i++)
{
if (gcd(a[i], a[i - ]) == ) flag = ;
ans = gcd(ans, a[i]);
ax = gcd(ax, a[i]);
if(ans==)
{
que.push(i);
ans = a[i + ];
}
}
if (flag) printf("%d\n", n);
else if (ax != ) printf("-1\n");
else
{
int an = inf;
while(!que.empty())
{
int num = ;
int u = que.front(); que.pop();
int ex = a[u]; u--;
while(ex!=)
{
ex = gcd(ex, a[u]);
u--;
num++;
}
an = min(an, num);
}
printf("%d\n", n - + an);
}
return ;
}
A
dp 20190617的更多相关文章
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
- px、dp和sp,这些单位有什么区别?
DP 这个是最常用但也最难理解的尺寸单位.它与“像素密度”密切相关,所以 首先我们解释一下什么是像素密度.假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算 ...
- android px转换为dip/dp
/** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dipTopx(Context context, float dpValue) { final floa ...
随机推荐
- CTF中的命令执行绕过
本位原创作者:Smity 在介绍命令注入之前,有一点需要注意:命令注入与远程代码执行不同.他们的区别在于,远程代码执行实际上是调用服务器网站代码进行执行,而命令注入则是调用操作系统命令进行执行. 作为 ...
- 详解 LinkedHashMap
同学们可能在看到这个类的时候就明白了很多关于这个类的特点,那么,本人就在这里来啰嗦一下,再来介绍下这个类: (有关Map集合的基本性质,请观看本人博文-- <详解 Map集合>) Link ...
- Java讲解RPC的基本实现
RPC远程过程调用可以说是分布式系统的基础,本文将通过Java演示一次普通的rpc调用到底发生了什么. 我曾经在网上看到有人提问,为什么RPC要叫作远程过程调用,而不叫作RMC远程方法调用.个人认为R ...
- pytorch 矩阵数据增加维度unsqueeze和降低维度squeeze
增加一个维度 out.unsqueeze(-1) 降低一个维度 out.squeeze(dim=1)
- JDBC处理CLOB 和 BLOB大对象
在数据库中: clob用于存储大量的文本数据 可以使用字符流操作 clob用于存储大量的二进制数据 可以使用字节流操作 以mysql为例 先准备一张表: CREATE TABLE `t_user2` ...
- Java 多线程--ThreadLocal Timer ExecutorService
ThreadLocal /** * ThreadLocal:每个线程自身的存储本地.局部区域 * @author xzlf * */ public class ThreadLocalTest01 { ...
- 关于Google下插件SwitchyOmega用法
开启代理后,尽管访问很自由了,但是我的搬瓦工,是有流量限制的.所以,在之前,我开启一会自由访问模式(戏称),然后关一会,用来方便打开国内网站. 是的,我这么坚持了半个月,之后,就崩溃了,太尼玛繁琐了! ...
- 集合-ArrayList 源码解析
ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可称之为动态数组. 类图 ArrayList实现了List, RandomAccess, Cloneable, j ...
- 文件读取的时候要留意 -- 序列化serialize()与反序列化unserialize():
原文:https://blog.csdn.net/little_rabbit_baby/article/details/53840543 序列化serialize()与反序列化unserialize( ...
- centos7.4挂载硬盘
场景:新网上买了台服务器,有个数据盘需要自己挂载 fdisk -l 能看见有一个85.9g的硬盘 然后mkfs -t ext4 /dev/sdb 格式化硬盘 mkdir /data新建data文件夹用 ...