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

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

暴力

#include<cstdio>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 512;
int a[MAXN]; int main()
{
int T, n;
scanf("%d", &T); while(T--)
{
int cnt = 0;
scanf("%d", &n);
REP(i, 0, n)
{
scanf("%d", &a[i]);
REP(j, 0, i)
if(a[j] > a[i])
cnt++;
} printf("%s\n", (n & 1 && cnt & 1) ? "impossible" : "possible");
} return 0;
}

归并排序

#include<cstdio>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 512;
int a[MAXN], t[MAXN], cnt; void merge_sort(int l, int r)
{
if(l + 1 >= r) return;
int m = (l + r) >> 1;
merge_sort(l, m); merge_sort(m, r); int p = l, q = m, i = l;
while(p < m || q < r)
{
if(q >= r || p < m && a[p] < a[q]) t[i++] = a[p++];
else t[i++] = a[q++], cnt += m - p;
}
REP(i, l, r) a[i] = t[i];
} int main()
{
int T, n;
scanf("%d", &T); while(T--)
{
cnt = 0;
scanf("%d", &n);
REP(i, 0, n) scanf("%d", &a[i]);
merge_sort(0, n);
printf("%s\n", (n & 1 && cnt & 1) ? "impossible" : "possible");
} return 0;
}
树状数组

#include<cstdio>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 512;
int a[MAXN], f[MAXN], n; int lowbit(int x)
{
return x & (-x);
} void add(int x)
{
while(x <= n)
{
f[x]++;
x += lowbit(x);
}
} int sum(int x)
{
int ret = 0;
while(x)
{
ret += f[x];
x -= lowbit(x);
}
return ret;
} int main()
{
int T;
scanf("%d", &T); while(T--)
{
int cnt = 0;
memset(f, 0, sizeof(f));
scanf("%d", &n);
REP(i, 0, n)
{
scanf("%d", &a[i]);
cnt += sum(n) - sum(a[i]-1);
add(a[i]);
}
printf("%s\n", (n & 1 && cnt & 1) ? "impossible" : "possible");
} return 0;
}

紫书 习题 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. 利用cookie判断文件下载完成

    在网页下载文件时,该文件又是通过后台代码生成的,比如报表之类的.当需要生成文件过大时会耗费很多时间,而文件生成好传到页面的时候也没有事件可以监听它,像微软官网,谷歌,百度等下载方式都是通过提示五秒过后 ...

  2. tcpsock.v2 与 ecocache

    因为很不满意 tcpsock 的设计与实现,及有意专为譬如游戏服务器端开发设计一套 TCP 网络库,所以年初即有了 tcpsock.v2 的开发计划,于是粗略整理出了以下几条目标计划: 1) TcpC ...

  3. 关于Number的属性和方法你知晓几分?速来围观!

    1.Number.isFinite() 方法用来检测传入的参数是否是一个有穷数(finite number)返回值为布尔值. 和全局的 isFinite() 函数相比,这个方法不会强制将一个非数值的参 ...

  4. 洛谷1099 [NOIP2007] 树网的核

    链接https://www.luogu.org/problemnew/show/P1099 题目描述 设T=(V,E,W)是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称TTT为 ...

  5. rpm方式在centos7中安装mysql

    .安装MySQL server 首先下载好mysql的rpm安装包 使用rpm命令安装: rpm -ivh MySQL-server--.glibc23.i386.rpm #rpm -ivh MySQ ...

  6. STM32使用HAL库实现ADC单通道转换

    STM32的ADC转换还是很强大的,它具有多个通道选择,这里我就不细说,不了解的可以自行百度,这里只是选取单通道,实现ADC转换.在文章开始之前,我说一下数据左对齐跟右对齐的差别,以前一直糊里糊涂的, ...

  7. Thunder9(迅雷9)去掉右侧浏览器广告的方法

    1.打开文件夹C:\Program Files (x86)\Thunder Network\Thunder9\Program\TBC 2.找到 ThunderBrowser.exe 3.重命名为任意名 ...

  8. nginx 查看每秒有多少访问量

    nginx访问量统计 1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print ...

  9. java判断string数组中是否包含某个元素

  10. 实战:percona-xtrabackup 2.1.9 for mysql 5.6.19

    ----1.编译安装percona-xtrabackup yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr ...