P1146 coin flip, p1146 coin flip

Description

There is a row of coins on the desktop, N in total, each coin is facing up. Now I want to flip all the coins to the back up, the rule is that every time I can flip any N-1 coins (front up is turned to the back up, and vice versa ). Find a shortest sequence of operations (turning each N-1 coin into one operation ).

Input/Output Format

Input Format:

The input contains only one row and a natural number N (N is an even number not greater than 100 ).

Output Format:

The first line of the output file contains an integer "S", indicating the minimum number of operations required. Each row in the next S line represents the status of the coin on the table after each operation (a row contains N integers (0 or 1), indicating the status of each coin: 0-positive up, and 1-the opposite side is up, no extra space is allowed ).

If there are multiple operating solutions, you only need to output the smallest lexicographically.

Input and Output sample input sample #1:

4

Output sample #1:

40111110000011111

Mathematical Method: the I-th flip is to flip all coins except the I-th coin.

Below is a proof of text:

Proof 1

Define A certain n-1 operation as A class.

Define the B operation to flip all coins.

Define a C operation to flip a coin.

The problem with the subject is whether A can reach A certain state after several A operations, while A operation is equivalent to doing B once C. Note that B and C operations are interchangeable, therefore, it can be understood that the C operation is performed for several times first, and then the B operation is performed for the same number of times.

The number of C operations is equivalent to one coin flip, so the I flip is to flip all the coins except the I coin.

Proof 2

Of course, it can also be explained as follows: make a very simple change -- break down five coins each time into two steps:

1. Flip a coin once;

2. Flip all coins once.

If p is an even number, the second step above is actually offset, so it is equivalent to taking the first step every time. So p = 6.

If p is an odd number, it is equivalent to only taking the first step at a time and turning all the coins over once. This is equivalent to doing only the first step of odd numbers, and finally keeping all the coins in front and up, this is obviously not feasible.

In summary, p = 6

Proof 3

All you need to do is to flip each coin an odd number of times.

A total of six coins, five at a time.

In this case, only one coin is flipped once, three, or five times.

However, you can only flip five times at a time, but not more or less. Therefore, you must increase the total number of times to an integer multiple of 5.

Therefore, each coin is flipped over five times. 5x6 = 30 times in total

5 at a time

30/5 = 6 times

A: At least six times

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 int a[10001]; 7 int main() 8 { 9 ios::sync_with_stdio(false);10 int n;11 cin>>n;12 cout<<n<<endl;13 for(int i=1;i<=n;i++)14 {15 for(int j=1;j<=n;j++)16 {17 if(j!=i)18 {19 a[j]==1?a[j]=0:a[j]=1;20 }21 }22 for(int i=1;i<=n;i++)23 cout<<a[i];24 cout<<endl;25 }26 return 0;27 }