https://www.hackerrank.com/contests/101hack50/challenges/even-and-odd-boxes/editorial

昨晚做的时候卡了挺久的。

首先能想到的是-1的情况,奇偶性要相同,因为序列操作只是移动,所以总量是固定的。所以,如果能把它变成合法的序列。

则是偶数 + 奇数 + 偶数 + .......这样,这个序列的奇偶性就是n / 2了,要相同。

然后找出不合法的位置,假设一共有ans个,那么ans / 2就是答案。

一开始是这样想的,后来看清楚题目了,每个箱子至少要1个。

那么就要看到,奇数位置上,放了1的话,它肯定只能够是增加一个,变得合法。

所以这类又要分类出来判断。设为add个,那么有可能ans >= add,或者ans < add

ans >= add的话好办,直接是add + (ans - add) / 2

不是的话,就是需要某些合法的位置给一些去add了。很多细节,我自己的小数据

7
6
6 8 3 1 1 4
5
3 1 1 1 1
3
14 3 10
3
1 2 4
4
1 1 1 1
5
1 1 1 1 6
7
1 4 1 2 1 1 1

ans:

2
-1
0
1
-1
2
4

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
const int maxn = 1e5 + ;
int a[maxn];
vector<int>vc, ff;
void work() {
vc.clear();
ff.clear();
int n;
scanf("%d", &n);
for (int i = ; i <= n; ++i) scanf("%d", a + i);
int ans = ;
LL sum = ;
int add = ;
for (int i = ; i <= n; ++i) {
sum += a[i];
if (a[i] == && (i & )) {
add++;
continue;
}
if (i & ) {
if (a[i] & ) {
ans++;
ff.push_back(a[i] - ); //存的是不合法的位置
} else if (a[i] != ) vc.push_back(a[i]);
} else {
if (!(a[i] & )) {
ans++;
ff.push_back(a[i] - ); //不合法的序列,要变成合法,先 - 1,全部去了add
} else if (a[i] != ) {
vc.push_back(a[i]);
}
}
}
int res = n / ;
if ((sum + res) & ) {
printf("-1\n");
return;
}
if (ans >= add) {
printf("%d\n", add + (ans - add) / );
} else {
int want = ans;
add -= ans;
for (int i = ; i < vc.size(); ++i) {
while (add > && vc[i] > ) {
vc[i] -= ;
add -= ;
want += ;
}
}
for (int i = ; i < ff.size(); ++i) {
while (add > && ff[i] > ) {
ff[i] -= ;
add -= ;
want += ;
}
}
if (add) {
printf("-1\n");
return;
}
printf("%d\n", want);
}
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
int t;
cin >> t;
while (t--) work();
return ;
}

Even-odd Boxes hackerrank 分类讨论的更多相关文章

  1. Codeforces 460D Little Victor and Set --分类讨论+构造

    题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...

  2. BZOJ-1067 降雨量 线段树+分类讨论

    这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...

  3. UVaLive 6862 Triples (数学+分类讨论)

    题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...

  4. 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil

    1177: [Apio2009]Oil Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1477  Solved: 589[Submit] Descri ...

  5. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array 分类讨论连续递推dp

    题意:给出一个 数列 和一个x 可以对数列一个连续的部分 每个数乘以x  问该序列可以达到的最大连续序列和是多少 思路: 不是所有区间题目都是线段树!!!!!! 这题其实是一个很简单的dp 使用的是分 ...

  6. 【cf789B】Masha and geometric depression(分类讨论/暴力)

    B. Masha and geometric depression 题意 在黑板上写数列,首项是b,公比是q,超过l时就停止不写.给定m个数,遇到后跳过不写.问一共写多少个数,如果无穷个输出inf. ...

  7. P2331 [SCOI2005]最大子矩阵 (动规:分类讨论状态)

    题目链接:传送门 题目: 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k( ...

  8. UVa 11722 Joining with Friend (几何概率 + 分类讨论)

    题意:某两个人 A,B 要在一个地点见面,然后 A 到地点的时间区间是 [t1, t2],B 到地点的时间区间是 [s1, s2],他们出现的在这两个区间的每个时刻概率是相同的,并且他们约定一个到了地 ...

  9. Bzoj4558:分类讨论 计算几何 组合数学

    国际惯例的题面: 这题让我爆肝啦......这种计数显然容斥,正好不含任何坏点的我们不会算,但是我们能算至少含零个坏点的,至少含一个坏点的,至少含两个坏点的......所以最终的答案就是(至少含零个坏 ...

随机推荐

  1. leetcode 191 Number of 1 Bits(位运算)

    Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ...

  2. 多线程之:java的CAS操作的相关信息

    一:锁机制存在的性能问题? 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁). 锁机制存在以下问题:(1)在多线程竞争下,加锁.释放锁会导 ...

  3. BZOJ1382:[Baltic2001]Mars Maps

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://www.lydsy.com/JudgeOnline/prob ...

  4. C# FileStream 按大小分段读取文本内容

    该例子首先在C盘根目录创建一个名为'file1.txt'的文本文件. 然后再运行该例子.. 完整代码如下: 引入命名空间: [csharp] view plain copy print? using  ...

  5. Linux命令总结_touch创建文件

    1.touch命令,用来创建文件或者修改文件时间戳 格式:touch [选项]... 文件... 选项 : -a   或--time=atime或--time=access或--time=use  只 ...

  6. windows7无法启动Telnet服务,出现…

    windows7无法启动Telnet服务,出现错误1068 2012 年 03 月 16 日 在[控制面板--程序--打开或关闭Windows功能]中开启telnet服务器和客户端后,在运行窗口中输入 ...

  7. Windows server 2003+IIS6+PHP5.3 以上的安装配置

    一.安装好IIS 具体安装方法可查看:http://down.chinaz.com/server/201102/11_1.htm. 二.下载并安装IIS FastCGI 下载地址:http://www ...

  8. NFS资料

      Linux NFS服务器的安装与配置 http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html Linux NFS服务器的安装与配 ...

  9. Laravel框架接入短信平台进行用户注册短信验证

    今天刚接触了一个短信接口平台,云通讯第三方短信提供服务商.http://www.yuntongxun.com/ 然后介绍一下怎么使用该短信平台来接入到自己的项目中. 首先你的去注册一个账号,然后根据提 ...

  10. Java线程安全与多线程开发

    互联网上充斥着对Java多线程编程的介绍,每篇文章都从不同的角度介绍并总结了该领域的内容.但大部分文章都没有说明多线程的实现本质,没能让开发者真正“过瘾”. 从Java的线程安全鼻祖内置锁介绍开始,让 ...