zoukankan      html  css  js  c++  java
  • poj1063

    题意:有一些珠子排成一圈,珠子有两种颜色:黑和白。每次操作可以调换中间隔着一个珠子的两珠子的位置,给出这个圈子的初始状态,问最终能否通过操作让圈子中所有同色的珠子排在一起,即黑白分开。

    分析:分两种情况,珠子总数为偶数,那么奇数位置上的珠子无法移动到偶数位上,偶数位的也无法移动到奇数位上,但在奇数位内部和偶数位内部可以自由移动。任何一个连续区间内奇数位和偶数位的数量差都不超过1。因此想要黑色珠子全都连在一起,则要求奇数位上的黑色珠子数量和偶数位上的黑色珠子数量之差的绝对值要小于等于1。

    对于第二种情况,珠子总数为奇数,这种情况一定可以达到目标,因为如果任意相邻两珠子可交换则一定可以达到目标。对于总数为奇数的情况,相当于将一种相邻两珠子可交换的排列方式更改了珠子的排列顺序,但交换方式不变。例如,7个珠子,1357246。把这个序列首尾相接则形成了一个相邻两两可交换的环,可以达到任何目标状态。

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    const    int        maxn = 31;
    
    int        n;
    
    void init()
    {
        int        i, a, b, temp;
        
        scanf("%d", &n);
        a = 0;
        b = 0;
        for (i = 0; i < n; i++)
        {
            scanf("%d", &temp);
            if (!temp)
                continue;
            if (i % 2 == 0)
                a++;
            else
                b++;
        }
        if (n % 2 == 1)
        {
            printf("YES
    ");
            return;
        }
        if (abs(a - b) <= 1)
        {
            printf("YES
    ");
            return;
        }
        printf("NO
    ");
    }
    
    int main()
    {
        int        t;
    
        //freopen("t.txt", "r", stdin);
        scanf("%d", &t);
        while (t--)
        {
            init();
        }
        return 0;
    }
    View Code
  • 相关阅读:
    一个不确定内容的数组,统计每个元素出现的次数的方法
    WebStorm配置TSLint
    angualr 项目环境搭建
    angular6 导出json数据到excal表
    angular6 引用echart第一次数据不显示解决
    angular6 开发实践基础知识汇总
    angular6实现对象转换数组对象
    angular 实现左侧和顶部固定定位布局
    ASP.NET MVC 全局异常
    IOC容器之Autofac
  • 原文地址:https://www.cnblogs.com/rainydays/p/3180885.html
Copyright © 2011-2022 走看看