zoukankan      html  css  js  c++  java
  • luogu P1146 硬币翻转

    题目描述

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

    输入输出格式

    输入格式:

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

    输出格式:

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

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

    输入输出样例

    输入样例#1:
    4
    输出样例#1:
    4
    0111
    1100
    0001
    1111

    设翻了x次,总共翻了y轮(指翻过的硬币数除以这排的硬币数)

    由题意得:x*(n-1)=y*n

    因为n为偶数,n-1为奇数

    所以x为偶数

    又n与n-1互质

    当x,y最小时

    x=n y=n-1 所以,只要翻n次

    剩下的靠样例理解

    当然处理时可以用位运算

    以上摘自luogu题解

    #include<cstdio>
    
    int n,a[200000];
    
    int main() 
    {
        scanf("%d",&n);
        printf("%d
    ",n);
        for(int i=1,k=1;i<=n;i++,k++) 
        {
            for(int j=1;j<n;j++)
                a[(j+k-1)%n+1]^=1;
            for(int j=1;j<=n;j++)
                printf("%d",a[j]);
            printf("
    ");    
        }
        return 0;
    }
  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/sssy/p/7107345.html
Copyright © 2011-2022 走看看