• 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;
    }


  • 相关阅读:
    lines-HDU5124(区间处理 +离散化)
    Reorder the Books-HDU5500
    Bad Hair Day-POJ3250(简单的入栈出栈)
    Count the Colors-ZOJ1610(线段树区间求)
    Just a Hook-HDU1698(线段树求区间)
    Mayor's posters-POJ2528(线段树+离散化)
    A Simple Problem with Integers-POJ3468
    Strongly connected-HDU4635
    Caocao's Bridges-HDU4738(Tarjin+求桥)
    Warm up-HUD4612(树的直径+Tarjin缩点)
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3299469.html
Copyright © 2020-2023  润新知