UVa 1620 懒惰的苏珊(逆序数)
Posted 谦谦君子,陌上其华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 1620 懒惰的苏珊(逆序数)相关的知识,希望对你有一定的参考价值。
https://vjudge.net/problem/UVA-1620
题意:给出一个序列,每次可以翻转4个连续的数,判断是否可以变成1,2,3...n。
思路:考虑逆序数,通过计算可以得出每次翻转4个连续的数,如果这4个数原来的逆序数为x,那么翻转之后逆序数会变为6-x。
1.n为偶数时,总会有序列的逆序数为偶数
2.当n为奇数时,并且这个所给的序列的逆序数为奇数,不管怎么变换 他的逆序数不能变为 偶数。
这两个结论是别人博客看来的,不过我不太清楚怎么推导来着。有人懂得话希望能告诉我一下。
1 #include<iostream> 2 using namespace std; 3 4 const int maxn = 505; 5 int n; 6 int a[maxn]; 7 8 int main() 9 { 10 //freopen("D:\\txt.txt", "r", stdin); 11 int t; 12 cin >> t; 13 while (t--) 14 { 15 cin >> n; 16 for (int i = 0; i < n; i++) 17 cin >> a[i]; 18 int cnt = 0; 19 for (int i = 0; i < n-1; i++) 20 { 21 for (int j = i + 1; j < n; j++) 22 { 23 if (a[i]>a[j]) cnt++; 24 } 25 } 26 if (cnt % 2 && n % 2) cout << "impossible" << endl; 27 else cout << "possible" << endl; 28 } 29 return 0; 30 }
以上是关于UVa 1620 懒惰的苏珊(逆序数)的主要内容,如果未能解决你的问题,请参考以下文章
「UVA10810」 Ultra-QuickSort 解题报告
UVA 11990 ”Dynamic“ Inversion(线段树+树状数组)