uvalive 2756 环形排列颠倒的次数

n participants of «crazy tea party» sit around the table. Each minute one pair of neighbors can change their places. Find the minimum time (in minutes) required for all participants to sit in reverse order (so that left neighbors would become right, and right - left).

看起来挺简单的,不过还是不会证明。

 1 #include <iostream>
 2 using namespace std;
 3
 4 int main ()
 5 {
 6     int t;
 7     cin >> t;
 8     while ( t-- )
 9     {
10         int n;
11         cin >> n;
12         int m = ( n / 2 ) * ( n / 2 - 1 ) / 2 + ( ( n + 1 ) / 2 ) * ( ( n + 1 ) / 2 - 1 ) / 2;
13         cout << m << endl;
14     }
15     return 0;
16 }
时间: 2024-11-08 19:26:01

uvalive 2756 环形排列颠倒的次数的相关文章

数论 UVALive 2756

这道题目考察的n个不同的数环形排列,每次相邻两个数交换位置,这样由正序转变成逆序所需操作的最小次数t. 公式:环形排列:t= n/2*(n/2 - 1)/2 + (n+1)/2* ((n+1)/2 - 1)/2 在这里在补充下线性排列的公式:t=n*(n-1)/2 #include<iostream>using namespace std;int main(){ int t; cin>>t; while(t--) { int n,ans; cin>>n; ans=(n/

UVALive 2756 Crazy tea party

这道题目考察的n个不同的数环形排列,每次相邻两个数交换位置,这样由正序转变成逆序所需操作的最小次数t. 公式:环形排列:t= n/2*(n/2 - 1)/2 + (n+1)/2* ((n+1)/2 - 1)/2 在这里在补充下线性排列的公式:t=n*(n-1)/2 1 #include <iostream> 2 using namespace std; 3 4 int main () 5 { 6 int t; 7 cin >> t; 8 while ( t-- ) 9 { 10 i

Josephus环形排列问题

题目:设n个人围坐在一圆桌周围,依次编号为1,2,...,n,从第s个人从1开始依次报数,数到m的人出列,然后从出列的下一个人重新开始报数,数到m的人又出列,…,如此反复直到只剩一人为止为止.对于任意给定的n,s和m,输出按出列次序得到的n个人员的序列. 代码如下: #include<stdio.h>int a[100]; void dele(int x,int t) //定义数组删除元素函数 { int j; if(x==t) a[x]=0; for(j=x;j<=t;j++) { a

[网络流专练6][线性规划与网络流剩余部分题解]

orz"orzGEOTCBRL" 6:lis 给定正整数序列x1 ,…… , xn. (1)计算其最长递增子序列的长度s. (2)计算从给定的序列中最多可取出多少个长度为s的递增子序列. (3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长 度为s的递增子序列.  看到题目就666了,前两问不是经典dp?因为序列是上升的,所以如果在x1前面加一个x1,个数显然多了f[x2][xn][s-1],或者xn后面加一个xn, 一样的……然后发现题意理解错T_T “多

UVA 10570 Meeting with Aliens 外星人聚会

题意:给你一个排列,每次可以交换两个整数(不一定要相邻),求最少交换次数把排列变成一个1~n的环形排列.(正反都算) 其实就是找环了,对于一个链状序列,最小交换次数等于不在对应位置的数字个数减去环的个数. 至于证明这里讲的比较详细:http://www.dewen.io/q/7967#ans16319 所以只要枚举一下环的起点就好了,dfs找环就行了. #include<bits/stdc++.h> using namespace std; const int maxn = 1e3+233;

Codeforces Round #353 (Div. 2) C. Money Transfers (思维)

原题请戳这里 题意: n个银行成环形排列.每个银行有一定的余额ai,每次可以在任意相邻的银行间转账.问 最少需要经过多少次转账使得所有银行的余额都为0. 分析: 由于所有银行的余额总数为0,则若把整个环看成一段,需要n-1次使所有余额为0. 把ai分为k个sum=0的部分,每部分的长度为li,使每个部分所有银行清零需要li-1步.n个 银行清零总共需要n-k步. 因此即是求(n-k)min,那么k值越大越好. 考虑前缀和,若sum[i]==sum[j],则区间[i+1,j]必定和为0,且[j+1

【网络流24题】No.19 负载平衡问题 (费用流)

[题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input.txt517 9 14 16 4 输出文件示例output.txt11 [分析] 其实我觉得这题可以贪心啊..n^2贪心??.没细想.. 打的是费用流.. 大概这样建图: 懒得写了..凌乱之美.. 求满流费用.. 1 #include<cstdio> 2 #include<cstdlib&

负载平衡(cogs 741)

?问题描述:G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运.?编程任务:对于给定的n 个环形排列的仓库的库存量,编程计算使n 个仓库的库存数量相同的最少搬运量.?数据输入:由文件overload.in提供输入数据.文件的第1 行中有1 个正整数n(n<=100),表示有n个仓库.第2 行中有n个正整数,表示n个仓库的库存量.?结果输出:程序运行结束时,将计算出的最少搬运量输出到文件ove

时间序列异常事件检测

一.异常数据挖掘简介: 异常数据挖掘,又称为离群点分析或者孤立点挖掘.在人们对数据进行分析处理的过程中,经常会遇到少量这样的数据,它们与数据一般模式不一致,或者说与大多数样相比有些不一样.我们称这样的数据为异常数据,对异常数据的处理在某些领域很有价值,例如在网络安全领域,可以利用异常数据挖掘来分析网络中的异常行为:在金融领域异常数据挖掘可以识别信用卡的欺诈交易.股市的操控行为.会计信息的虚假报价.欺诈贷款等. 异常数据挖掘其中又包含时间序列和非时间序列.非时间序列主要为发现异常的点集,其中各事件