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


  • 相关阅读:
    Python教程(2.2)——数据类型与变量
    Python教程(2.1)——控制台输入
    Python教程(1.2)——Python交互模式
    (译)割点
    Python教程(1.1)——配置Python环境
    Python教程(0)——介绍
    [HDU1020] Encoding
    [HDU1004] Let the balloon rise
    扩展中国剩余定理 exCRT 学习笔记
    51nod 1943 联通期望 题解【枚举】【二进制】【概率期望】【DP】
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3299469.html
Copyright © 2011-2022 走看看