题目描述

在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上。现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然)。求一个最短的操作序列(将每次翻转N-1枚硬币成为一次操作)。

输入输出格式

输入格式:

输入只有一行,包含一个自然数N(N为不大于100的偶数)。

输出格式:

输出文件的第一行包含一个整数S,表示最少需要的操作次数。接下来的S行每行分别表示每次操作后桌上硬币的状态(一行包含N个整数(0或1),表示每个硬币的状态:0――正面向上,和1――反面向上,不允许出现多余空格)。

对于有多种操作方案的情况,则只需字典序最小输出一种。

输入输出样例

输入样例#1:

4
输出样例#1:

4
0111
1100
0001
1111

数学方法:第i次翻转就是翻转除了第i个硬币以外的所有硬币。

下面给出文字证明:

证明1

定义翻某n-1个为A类操作。

定义B操作,是把所有的硬币全部翻面。

定义C操作,是翻某一个硬币。

题主的问题是若干次A操作之后能否达到某个状态,而一个A操作等同于做一次B一次C,注意到B和C操作是可交换的,因此可以理解为先做若干次数的C操作,然后再做相同次数的B操作。

而做若干次C操作相当于一个一个硬币地翻,所以第i次翻转就是翻转除了第i个硬币以外的所有硬币。

证明2

当然,也可以这样解释:做一个很简单的变换--把每次翻转5个硬币,分解成两步:

1、把一个硬币翻转一次;

2、把所有的硬币翻转一次

如果p为偶数,那么上面的第二步实际上被抵消了,所以相当于每次只做第一步。所以p=6.

如果p是奇数,那么相当于每次只做第一步,最后把所有的硬币翻一次面,这等价于只做奇数次第一步,最后保持所有的硬币仍然是正面向上,这显然是不能做到的。

综上,p=6

证明3

要让所有硬币翻过来,要做的就是每个硬币翻奇数次。

总共六个硬币,每次翻五个。

那么情况就只有每个硬币翻一次、三次、五次。

但是每次只能翻五个,不能多不能少,所以就要求总共翻的次数是5的整倍数。

所以就是每个硬币翻五次。总共翻了5x6=30次

每次翻5个

30/5=6次

答:最少翻六次

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int a[];
int main()
{
ios::sync_with_stdio(false);
int n;
cin>>n;
cout<<n<<endl;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(j!=i)
{
a[j]==?a[j]=:a[j]=;
}
}
for(int i=;i<=n;i++)
cout<<a[i];
cout<<endl;
}
return ;
}

P1146 硬币翻转的更多相关文章

  1. luogu P1146 硬币翻转

    题目描述 在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上.现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然).求一个最短的操作序列(将每次翻 ...

  2. 洛谷——P2708 硬币翻转

    P2708 硬币翻转 题目背景 难度系数:☆☆☆☆☆(如果你看懂了) 题目描述 从前有很多个硬币摆在一行,有正面朝上的,也有背面朝上的.正面朝上的用1表示,背面朝上的用0表示.现在要求从这行的第一个硬 ...

  3. Luogu [P2708] 硬币翻转

    硬币翻转 题目详见:硬币翻转 这道题是一道简单的模拟(其实洛谷标签上说这道题是搜索???),我们只需要每一次从前往后找相同的硬币,直到找到不同的硬币n,然后将找到的前n-1个相同的硬币翻过来,每翻一次 ...

  4. 洛谷 P1146 【硬币翻转】题解

    很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...

  5. P1059 硬币翻转

    题目描述 从前有很多个硬币摆在一行,有正面朝上的,也有背面朝上的.正面朝上的用1表示,背面朝上的用0表示.现在要求从这行的第一个硬币开始,将前若干个硬币一起翻面,问如果要将所有硬币翻到正面朝上,最少要 ...

  6. 洛谷 pP2708 硬币翻转

    题目描述 从前有很多个硬币摆在一行,有正面朝上的,也有背面朝上的.正面朝上的用1表示,背面朝上的用0表示.现在要求从这行的第一个硬币开始,将前若干个硬币一起翻面,问如果要将所有硬币翻到正面朝上,最少要 ...

  7. P2708 硬币翻转(简单模拟)

    题意:弱鸡,其实题意是1到i都变化.然后把所有的硬币都变到正面. 简单的模拟: 思路:本质就是记录相邻字符的有几组不同,比如11010,则就有3组不同,但是,这样变化出来的字符串是00000,所以需要 ...

  8. 洛谷 P2708 硬币翻转 题解

    题目传送门 真如题面所说,难度系数:☆☆☆☆☆(如果你看懂了). 从后往前扫一次,如果a[i]==0&&a[i-1]==1那么将ans+2. 注意最后不要忘记开头if(a[0]=='0 ...

  9. 程序语言与编程实践4-> 蓝桥杯C/C++备赛记录2 | 第二周学习训练

    0323,又是一周星期三,按道理该总结了.这周前几天写题比较多,后面事情多了起来,就没怎么写了.主要方向是洛谷的基本语法熟悉,PTA平台数据结构的一些题目. 0323附上: 题目比较多,所以文章可能有 ...

随机推荐

  1. Coefficient Computation (大整数、Java解决)

    Coefficient Computation UVALive8265 题意:计算组合数C(n,k)的值并将值按给定的进制输出. 思路:Java大整数类硬上. PS:刚刚学完Java的大整数类,结果却 ...

  2. 18/10/19 周五欢乐赛题解(c++版)

    注意本题解并没有去追求最优解,只是用比较暴力的方法求解.D题听说要改说明不是位数30位,目前除了D题可能有问题之外其他代码已经全部正确. A.查找字串 用string BF(暴力求解即可) 代码 #i ...

  3. [pytorch学习]1.pytorch ubuntu安装

    看完了Deep Learning with Python,尝试了部分Keras的demo代码. 感觉Keras虽然容易上手,能够快速搭建出一个通用的模型,但是缺乏对底层的控制. 同时,在使用了自己编译 ...

  4. 亚马逊免费服务器搭建Discuz!论坛过程(四)

    上述命令还可能因缺少包引发其他错误: 如果出错则安装对应的包即可. 以下供参考: yum install libxml2 yum install libxml2-devel -y yum instal ...

  5. Problem 34

    Problem 34 https://projecteuler.net/problem=34 145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 1 ...

  6. (蓝桥杯)第八届A组C/C++跳蚱蜢

    #include<iostream> #include<memory.h> #include<stack> #include<string> #incl ...

  7. [POJ1733]Parity game(并查集 + 离散化)

    传送门 题意:有一个长度已知的01串,给出[l,r]这个区间中的1是奇数个还是偶数个,给出一系列语句问前几个是正确的 思路:如果我们知道[1,2][3,4][5,6]区间的信息,我们可以求出[1,6] ...

  8. loosejar原理简要分析

    loosejar这个小工具能够动态分析出应用中有每一个jar包的实际使用情况,详情请參阅<通过loosejar清理应用中冗余的jar包>基本原理是利用instrumentation的特性用 ...

  9. GTK经常使用控件之行编辑( GtkEntry )

    行编辑,仅仅同意输入一行内容的控件.如password输入框. 行编辑的创建: GtkWidget *gtk_entry_new(void); 返回值:行编辑指针 设置行编辑内容的最大长度: void ...

  10. couchbase的备份与恢复命令

    下面技术应用于最优质的水果的鲜果篮 ./cbbackup http://192.168.1.112:8091 /backups/20140505 -u Administrator -p passwor ...