zoukankan      html  css  js  c++  java
  • POJ 1063 Flip and Shift 最详细的解题报告

    题目来源:Flip and Shift

    题目大意:一个椭圆形的环形容器中有黑色和白色两种盘子,问你是否可以将黑色的盘子连续的放在一起。你可以有以下两种操作:

    1、顺时针旋转所有的盘子

    2、顺时针旋转3个盘子

    解题思路:第一种操作表明你可以对任意一个盘子执行第二种操作,所以重点在于第二种操作。仔细分析一下会发现,第二种操作其实就是将某一个盘子当前的index加2,所以我们可以先统计一下黑色盘子的个数count,然后用一个数组将所有的盘子存起来,使数组中0-count所存放的是黑色盘子(通过下标加2的操作),如果到最后都是黑色盘子,则输出YES,反之NO。

    具体算法(java版,可以直接AC)

     1 import java.util.Scanner;
     2 
     3 public class Main {
     4 
     5     public static void main(String[] args) {
     6         Scanner scanner = new Scanner(System.in);
     7         int casNum = scanner.nextInt();
     8         for (int i = 0; i < casNum; i++) {
     9             int len = scanner.nextInt();
    10             int[] array = new int[len];
    11             int count = 0;
    12             for (int j = 0; j < len; j++) {
    13                 array[j] = scanner.nextInt();
    14                 if (array[j] == 1) {
    15                     count++;
    16                 }
    17             }
    18 
    19             for (int j = count ; j < len; j++) {
    20                 if (array[j] == 1) {
    21                     int index = j;
    22                     while (index >= count) {
    23                         index = (index + 2) % len;
    24                     }
    25                     while (array[index] == 1 && index < count) {
    26                         index = (index + 2) % len;
    27                     }
    28                     if (index < count) {
    29                         int temp = array[index];
    30                         array[index] = array[j];
    31                         array[j] = temp;
    32                     }
    33                 }
    34             }
    35             boolean flag = true;
    36             for (int j = 0; j < count; j++) {
    37                 if (array[j] == 0) {
    38                     flag = false;
    39                     break;
    40                 }
    41             }
    42             if (flag) {
    43                 System.out.println("YES");
    44             } else {
    45                 System.out.println("NO");
    46             }
    47         }
    48     }
    49 
    50 }
  • 相关阅读:
    必须要狠狠的喷一把苹果
    机械键盘四种轴试用体验
    linux终端快捷键
    挥别我在软件开发的第一个公司
    mysql 查询优化
    oracle 用户创建这个挺靠谱
    重置了下系统好多关于mysql密码的文章都很渣拷分好的备用
    关于WebView的复习
    Bpmx实施经验
    使用Nexus私服代理其他maven仓库(jitpack、jcenter)
  • 原文地址:https://www.cnblogs.com/pinxiong/p/4034290.html
Copyright © 2011-2022 走看看