码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 1620 懒惰的苏珊(逆序数)

时间:2017-01-30 22:51:33      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:str   iostream   推导   targe   并且   for   stdin   通过   ...   

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 懒惰的苏珊(逆序数)

标签:str   iostream   推导   targe   并且   for   stdin   通过   ...   

原文地址:http://www.cnblogs.com/zyb993963526/p/6358445.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!