CF911D Inversion Counting
题目链接:http://codeforces.com/contest/911/problem/D
知识点: 暴力
解题思路:
先暴力算出所有的逆序对数,得出原始的奇偶性。
对于每一次倒置,不难发现:非逆序对和逆序对会互相转化,原来的非逆序对会变成逆序对,逆序对会变成非逆序对。所以,如果倒置的区间中有奇数个数对,那么逆序对数的奇偶性会变换,导致整体的奇偶性变换;否则整体奇偶性不变。
AC代码:
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 const int maxn = 1510; 5 int a[maxn]; 6 int main(){ 7 int n; 8 scanf("%d",&n); 9 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 10 int have=0; 11 for(int i=1;i<=n;i++){ 12 for(int j=i+1;j<=n;j++){ 13 if(a[i]>a[j]) have++; 14 } 15 } 16 bool odd; 17 if(have%2==1) odd=true; 18 else odd=false; 19 int m,l,r; 20 scanf("%d",&m); 21 for(int i=0;i<m;i++){ 22 scanf("%d%d",&l,&r); 23 int shu=r-l+1; 24 int dui=shu*(shu-1)/2; //求出数对数 25 if(dui%2==1) odd=!odd; 26 if(odd) printf("odd\n"); 27 else printf("even\n"); 28 } 29 return 0; 30 }
“这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”

浙公网安备 33010602011771号