01翻转

作者: RobotBerry | 来源:发表于2017-04-27 10:27 被阅读0次

问题描述

牛牛正在挑战一款名为01翻转的游戏。游戏初始有A个0,B个1,牛牛的目标就是把所有的值都变为1,每次操作牛牛可以任意选择恰好K个数字,并将这K个数字的值进行翻转(0变为1,1变为0)。牛牛如果使用最少的操作次数完成这个游戏就可以获得奖品,牛牛想知道最少的操作次数是多少?
例如:A = 4 B = 0 K = 3
0000 -> 1110 -> 1001 -> 0100 -> 1111
需要的最少操作次数为4

输入描述

输入为一行:
一共三个整数A(0 ≤ A ≤ 100,000),B(0 ≤ B ≤ 100,000),K(1 ≤ K ≤100,000).以空格分隔

输出描述

输出一个整数,表示最少需要的操作次数。如果不能完成,则输出-1

输入例子

4 0 3

输出例子

4

分析

总的思路是:先把能翻的1都翻过来,每次翻K个,统计翻了多少次以及还剩下多少个1。剩下的1最多每翻两次减少2*(总数字S-K),再考虑一些特殊情况就好了。

note

暂时不能完全理解= =

代码

#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int a, b, k;
    scanf("%d%d%d", &a, &b, &k);

    int s = a + b;
    int r = a % k;
    int c = a / k;

    if (a == 0 || r == 0);
    else if ((s <= k) || ((r & 1) && !(k & 1)))
        c = -1;
    else if (!((k + r) & 1) && c > 0 && b + k * c >= 2 * k - (k + r) / 2)
        c++;
    else if (!(r & 1))
        c += 2 * ceil((double)r / (2 * (s - k)));
    else
        c += 2 * ceil((double)(k - r) / (2 * (s - k))) + 1;

    printf("%d\n", c);

    return 0;
}

相关文章

  • 01翻转

    问题描述 牛牛正在挑战一款名为01翻转的游戏。游戏初始有A个0,B个1,牛牛的目标就是把所有的值都变为1,每次操作...

  • D2 翻转学习:如何更好地实践翻转课堂与慕课教学

    【书名】翻转学习:如何更好地实践翻转课堂与慕课教学 【作者】【美】乔纳森·伯格曼亚伦·萨姆斯 01翻转课堂 是一种...

  • 翻转课堂的尴尬。

    翻转课堂”推进中遭遇的尴尬 原创 2016-01-04 吴樱花 教师博览 在课堂教学方式中,“翻转课堂”目前已经成...

  • PPT美化4步走-Day5/10

    今天是PPT精进营的第5天,教是最好的学,翻转课堂,翻转人生! Part 01 改字体 黑体:工作型字体简单大方;...

  • 翻转日记01  2016.9.23

    【翻轉日記,一】又開始了新一輪的英語大二教學,接手了兩個英語西班牙語雙語班級。其中一個班級活躍,另一個班級很沉寂。...

  • 《翻转课堂学习》01 翻转课堂的起源

    传统课堂的概念及弊端 一说起传统课堂,估计大家都比较熟悉:在一个教室里,有几排桌椅、三十几个学生、一个老师对所有人...

  • 开启幸福人生的三把钥匙

    开启幸福人生的3把要是-火星爷爷 用策略、创意和故事,翻转原本缺陷的一生。 01 策略(看势顺势,翻转人生) 找专...

  • 【亲子】肚里住个小小人——孕期日记(154)

    2011年01月2日 星期日晴 亲爱的宝宝: 昨天晚上老妈胃疼得受不了,向左翻转,向右翻转,怎么转都不行,难受的要...

  • 01-链表原地翻转

    题目 翻转一个链表。给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null要求原地翻...

  • 《透视翻转课堂》第四章阅读笔记

    翻转课堂实施的三种类型:大翻转、中翻转、小翻转。 大翻转就是课内课外一同翻转。学生独立学习教师提供的资源,完成知识...

网友评论

      本文标题:01翻转

      本文链接:https://www.haomeiwen.com/subject/lzsgzttx.html