这道题看了半天没看出什么规律, 然后看到别人的博客, 结论是当n为奇数且逆序数为奇数的时候
无解, 否则有解。但是没有给出证明, 在网上也找到详细的证明……我也不知道是为什么……

求逆序对有两种方法, 树状数组和归并排序, 当然这道题数据很小可以直接暴力, 我三种都写了。

暴力

  1. #include<cstdio>
  2. #define REP(i, a, b) for(int i = (a); i < (b); i++)
  3. using namespace std;
  4. const int MAXN = 512;
  5. int a[MAXN];
  6. int main()
  7. {
  8. int T, n;
  9. scanf("%d", &T);
  10. while(T--)
  11. {
  12. int cnt = 0;
  13. scanf("%d", &n);
  14. REP(i, 0, n)
  15. {
  16. scanf("%d", &a[i]);
  17. REP(j, 0, i)
  18. if(a[j] > a[i])
  19. cnt++;
  20. }
  21. printf("%s\n", (n & 1 && cnt & 1) ? "impossible" : "possible");
  22. }
  23. return 0;
  24. }

归并排序

  1. #include<cstdio>
  2. #define REP(i, a, b) for(int i = (a); i < (b); i++)
  3. using namespace std;
  4. const int MAXN = 512;
  5. int a[MAXN], t[MAXN], cnt;
  6. void merge_sort(int l, int r)
  7. {
  8. if(l + 1 >= r) return;
  9. int m = (l + r) >> 1;
  10. merge_sort(l, m); merge_sort(m, r);
  11. int p = l, q = m, i = l;
  12. while(p < m || q < r)
  13. {
  14. if(q >= r || p < m && a[p] < a[q]) t[i++] = a[p++];
  15. else t[i++] = a[q++], cnt += m - p;
  16. }
  17. REP(i, l, r) a[i] = t[i];
  18. }
  19. int main()
  20. {
  21. int T, n;
  22. scanf("%d", &T);
  23. while(T--)
  24. {
  25. cnt = 0;
  26. scanf("%d", &n);
  27. REP(i, 0, n) scanf("%d", &a[i]);
  28. merge_sort(0, n);
  29. printf("%s\n", (n & 1 && cnt & 1) ? "impossible" : "possible");
  30. }
  31. return 0;
  32. }
树状数组

  1. #include<cstdio>
  2. #include<cstring>
  3. #define REP(i, a, b) for(int i = (a); i < (b); i++)
  4. using namespace std;
  5. const int MAXN = 512;
  6. int a[MAXN], f[MAXN], n;
  7. int lowbit(int x)
  8. {
  9. return x & (-x);
  10. }
  11. void add(int x)
  12. {
  13. while(x <= n)
  14. {
  15. f[x]++;
  16. x += lowbit(x);
  17. }
  18. }
  19. int sum(int x)
  20. {
  21. int ret = 0;
  22. while(x)
  23. {
  24. ret += f[x];
  25. x -= lowbit(x);
  26. }
  27. return ret;
  28. }
  29. int main()
  30. {
  31. int T;
  32. scanf("%d", &T);
  33. while(T--)
  34. {
  35. int cnt = 0;
  36. memset(f, 0, sizeof(f));
  37. scanf("%d", &n);
  38. REP(i, 0, n)
  39. {
  40. scanf("%d", &a[i]);
  41. cnt += sum(n) - sum(a[i]-1);
  42. add(a[i]);
  43. }
  44. printf("%s\n", (n & 1 && cnt & 1) ? "impossible" : "possible");
  45. }
  46. return 0;
  47. }

紫书 习题 8-20 UVa 1620 (找规律+求逆序对)的更多相关文章

  1. 【poj 3090】Visible Lattice Points(数论--欧拉函数 找规律求前缀和)

    题意:问从(0,0)到(x,y)(0≤x, y≤N)的线段没有与其他整数点相交的点数. 解法:只有 gcd(x,y)=1 时才满足条件,问 N 以前所有的合法点的和,就发现和上一题-- [poj 24 ...

  2. hdu 2865 Polya计数+(矩阵 or 找规律 求C)

    Birthday Toy Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  3. 紫书 习题8-12 UVa 1153(贪心)

    本来以为这道题是考不相交区间, 结果还专门复习了一遍前面写的, 然后发现这道题的区间是不是 固定的, 是在一个范围内"滑动的", 只要右端点不超过截止时间就ok. 然后我就先考虑有 ...

  4. 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)

    用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #includ ...

  5. 紫书 习题 11-8 UVa 1663 (最大流求二分图最大基数匹配)

    很奇怪, 看到网上用的都是匈牙利算法求最大基数匹配 紫书上压根没讲这个算法, 而是用最大流求的. 难道是因为第一个人用匈牙利算法然后其他所有的博客都是看这个博客的吗? 很有可能-- 回归正题. 题目中 ...

  6. 紫书 习题8-7 UVa 11925(构造法, 不需逆向)

    这道题的意思紫书上是错误的-- 难怪一开始我非常奇怪为什么第二个样例输出的是2, 按照紫书上的意思应该是22 然后就不管了,先写, 然后就WA了. 然后看了https://blog.csdn.net/ ...

  7. 紫书 习题 8-2 UVa 1610 (暴力出奇迹)

    这道题我真的想的非常的复杂, 拿草稿纸一直在找规律,推公式, 然后总有一些特殊的情况. 然后就WA了N次.无奈之下看了别人的博客, 然后就惊了.直接暴力枚举两个相邻字符串 里面的所有可能就可以了--真 ...

  8. 紫书 习题 10-11 UVa 1646(斐波那契+高精度)

    自己用手算一下可以发现是斐波那契数列,然后因为数字很大,用高精度 以后做题的时候记得算几个数据找规律 #include<cstdio> #include<cmath> #inc ...

  9. GCD XOR UVA 12716 找规律 给定一个n,找多少对(a,b)满足1<=b<=a<=n,gcd(a,b)=a^b;

    /** 题目:GCD XOR UVA 12716 链接:https://vjudge.net/problem/UVA-12716 题意:给定一个n,找多少对(a,b)满足1<=b<=a&l ...

随机推荐

  1. MySQL 面试题(一)

    原文地址:http://www.2cto.com/database/201311/254385.html 作者:黄杉(红黑联盟) 公司招聘MySQL DBA面试心得 1    2年MySQL DBA经 ...

  2. oracle11.2静默安装

    操作系统及Oracle版本 Linux版本:rhel-server-5.8-x86_64-dvd Oracle版本:Oracle Database 11g Release 2 (11.2.0.4.0) ...

  3. myeclipse反编译安装 jd-gui.exe下载

    一:在线安装 1.Help->Install New Site Name:** Location:http://jd.benow.ca/jd-eclipse/update 二:手动安装 1.下载 ...

  4. css实现透明的两种方式及其区别

    一.opacity:0~1 值越高,透明度越低,下面为示例 选择器{ opacity:0.5 } 选择器匹配到的节点们,包括节点们的孩子节点,都会实现%50透明,另 0.5 可直接写成 .5 二.rg ...

  5. array_combine php一个比较偏门的数组函数

    这函数  返回数组1的值 当做key,把数组2的值当做value,   当查询数据库用了 group +GROUP_CONCAT 两个组合时,(例如查询某个班级的,用户名,用户id,返回的是字符串,打 ...

  6. web.xml中Filter过滤器标签说明

    原文:http://www.cnblogs.com/edwardlauxh/archive/2010/03/11/1918618.html 在研究liferay框架中看到Web.xml中加入了过滤器的 ...

  7. Http请求和相应模式(B/S)(1)

    B/S模式 服务器端的接受数据 :浏览器端 表单格式 <form></form> GET:请求方式, /index.html  Web浏览器上的资源路径 uname=bjxt& ...

  8. 5分钟学会 CSS Grid 布局

    欢迎加入前端交流群交流知识&&获取视频资料:749539640 这是一篇快速介绍网站未来布局的文章. Grid 布局是网站设计的基础,CSS Grid 是创建网格布局最强大和最简单的工 ...

  9. Charles抓取微信小程序数据 以及 其它应用网站数据

    为了抓取小程序数据所以使用Charles来抓取,下面介绍下使用方法(mac环境下使用).使用Charles可以非常方便的抓取Http/Https请求.官方dmg下载地址:点击此处下载 Charles抓 ...

  10. Java基础——protected访问修饰符探讨

    Java基础——protected访问修饰符探讨 根据官方说法:(如图) protected修饰符是可以修饰其他包中的子孙类的,但是我做了个实验,结果发现了一个有趣的现象! 具体请往下看: packa ...