zoukankan      html  css  js  c++  java
  • zoj 1730 / poj 1455 Crazy Tea Party

            这阵子都没怎么写代码,由于开学,忙于各种琐碎的事情,现在静下来了开始跟着暑假的节奏刷题了。

            这道题一开是没看清题目~在寝室刷题就是效率不高。。。

            后来才知道,题目意思是,一个环形序列,1minute可以交换相邻的两个位置,问逆序所需的最小时间是多少。

            如果不是环形的话那就好办了,就是个冒泡。

            非环形时:

                   如 n = 5 : 1 2 3 4 5

                   所需时间为:n*(n-1)/2 = 10

            环形时:

                   如 n = 5 :1 2 3 4 5

                   可将 n拆分成2 + 3

                           1 2 和 3 4 5

                   可用4部将其逆序

                            1:2 1 和 3 4 5

                            2:2 1 和 4 3 5

                            3:2 1 和 4 5 3

                            4:2 1 和 5 4 3

                    由于其为环形,故至此完成逆序操作      

             所以这题就变得十分简单了,time =    n/2*(n/2 - 1)/2 + (n+1)/2* ((n+1)/2 - 1)/2 

           

    #include<iostream>
    using namespace std;
    int main(void)
    {
        int n,ncases;
        cin>>ncases;
        while(ncases--)
        {
    	cin>>n;
    	cout<<(n/2*(n/2-1)/2+(n+1)/2*((n+1)/2-1)/2)<<endl;
        }
        return 0;
    }


  • 相关阅读:
    MVC MVP MVVM三者的区别
    有状态组件 和 无状态组件的区别
    判断数据类型的几种方法
    bind的使用
    新时代web组件开发标准
    node.js上传文件
    封装的组件
    mysql数据库比较,各数据库不同之处
    node.js中使用Redis
    centos下安装nodejs的三种种方式
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3299469.html
Copyright © 2011-2022 走看看